💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
通过键-值的方法进行搜索,可以使用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; } ~~~ 运行: 崩溃。 ![这里写图片描述](https://box.kancloud.cn/2016-08-03_57a18cb008861.jpg "") 这是在控制台程序中,编译器会温柔的给你提示。 但是在一个大型的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; } ~~~