2 c++ stl visual-c++
我正在努力保持信息std::map.但我有一个问题find:
typedef map<string, string, equal_to<string>> MAP_STRING2STRING;
....
MAP_STRING2STRING map;
MAP_STRING2STRING::const_iterator iter;
Run Code Online (Sandbox Code Playgroud)
当我试图找到时key,我收到以下错误:
iter = map.find(key);
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
仅当我有内容时才会出现此错误map.
你的地图有一种错误的比较函子.您需要严格的弱排序(小于或大于类型比较),而不是相等.您可以省略比较仿函数参数并使用小于比较std::string.这通过字符串的字典比较来实现严格的弱排序:
typedef map<string, string> MAP_STRING2STRING;
Run Code Online (Sandbox Code Playgroud)
这相当于
typedef map<string, string, less<string> > MAP_STRING2STRING;
Run Code Online (Sandbox Code Playgroud)
在内部,地图使用严格的弱排序比较来对自己进行排序,并确定两个键是否相等.
第三个模板参数允许您使用自定义排序条件实例化地图.例如,这将创建一个具有上述反向排序的地图:
typedef map<string, string, greater<string> > MAP_STRING2STRING;
Run Code Online (Sandbox Code Playgroud)