##沒有躲過的坑--map查找結果處理
通過鍵-值的方法進行搜索,可以使用map,極大的提高了速度。
下面代碼就是使用map的find查找,通過鍵,找出對應的值。
~~~
map<std::string, int> string_int_map;
//對string_int_map進行初始化
map<std::string, int >::iterator iter_string_int;
string substring_to_find = ":who call who:";
iter_string_int = string_int_map.find(all_emoji_string[i]);
int result = iter_string_int ->second;
~~~
還是,上面的程序大多數情況下沒問題,但是我沒有考慮萬一map中不存在我們查找的鍵呢?
再看了一下find函數的返回值:?
**引用具有指定鍵的元素的位置的迭代器,如果找不到具有鍵的匹配項,則引用映射中 (map::end()) 最后一個元素后面的位置。**
如果你沒考慮這個,那么當返回map::end()后:
~~~
iter_string_int ->second;
~~~
這個指向超尾的迭代器的second和first又是什么?
寫個小程序測試一下:
~~~
#include<iostream>
#include<map>
int main()
{
std::map<std::string, int> test_map = {
{"how", 3},
{"are", 4},
{"you", 5}
};
std::map<std::string, int >::iterator iter_string_int;
std::string key_string = "shit";
iter_string_int = test_map.find(key_string);
std::cout << iter_string_int->second << std::endl;
return 0;
}
~~~
運行:?
崩潰。?

這是在控制臺程序中,編譯器會溫柔的給你提示。?
但是在一個大型的win32程序中,就不會這么輕易的給你提示了。
所以 我們要判斷find函數的返回值:
find的返回值不等于map::end(),才可以往下進行操作。
~~~
#include<iostream>
#include<map>
int main()
{
std::map<std::string, int> test_map = {
{"how", 3},
{"are", 4},
{"you", 5}
};
std::map<std::string, int >::iterator iter_string_int;
std::string key_string = "shit";
iter_string_int = test_map.find(key_string);
if(iter_string_int == test_map::end())
{
std::cout << "error" << endl;
}
else
{
std::cout << iter_string_int->second << std::endl;
}
return 0;
}
~~~
[](http://blog.csdn.net/wangshubo1989/article/details/50043917#)[](http://blog.csdn.net/wangshubo1989/article/details/50043917# "分享到QQ空間")[](http://blog.csdn.net/wangshubo1989/article/details/50043917# "分享到新浪微博")[](http://blog.csdn.net/wangshubo1989/article/details/50043917# "分享到騰訊微博")[](http://blog.csdn.net/wangshubo1989/article/details/50043917# "分享到人人網")[](http://blog.csdn.net/wangshubo1989/article/details/50043917# "分享到微信")
- 前言
- deprecated關鍵字
- 指針(內存泄露)
- 頭文件相互包含(Compiler error C2653: not a class or namespace name)
- 獲取一張圖片的width和height
- This function or variable may be unsafe.
- 智能指針陷阱
- wstring與string的轉換
- windows下chrome瀏覽器插件不能安裝
- 重定義關鍵字
- 正確釋放vector的內存
- 獲取設備環境HDC
- 抽象類不能實例化對象(但是你明明定義的不是抽象類)
- 重載賦值運算符的自我賦值
- 程序中的變量未初始化
- 成對使用new和delete時要采取相同的形式
- 意想不到的除數為零
- map的初始化(插入數據)
- 正則表達式截取字符串
- 捕獲窗口之外的鼠標消息(鉤子還是??)
- 類中的靜態成員變量(static or const static)
- 有if就要有else(一定成對)
- map查找結果處理
- 使用using namespace std的壞習慣
- new一個指針數組、以及創建動態二維數組
- 使用太多的全局變量
- 沒有及時break出for循環
- vector使用erase后迭代器變成野指針
- C++函數的默認參數(重新定義默認參數)
- 0xC0000005: 讀取位置 xxx時發生訪問沖突
- std::string初始化、最快速判斷字符串為空
- 你開發的軟件安裝在C盤Program Files (x86)下產生的異常