我正在尝试将信息保存在std::map
. 但我有一个问题find
:
typedef map<string, string, equal_to<string>> MAP_STRING2STRING;
....
MAP_STRING2STRING map;
MAP_STRING2STRING::const_iterator iter;
当我尝试查找key
时,出现以下错误:
iter = map.find(key);
我究竟做错了什么?
仅当我在map
.
我正在尝试将信息保存在std::map
. 但我有一个问题find
:
typedef map<string, string, equal_to<string>> MAP_STRING2STRING;
....
MAP_STRING2STRING map;
MAP_STRING2STRING::const_iterator iter;
当我尝试查找key
时,出现以下错误:
iter = map.find(key);
我究竟做错了什么?
仅当我在map
.
你的地图有错误的比较函子。您需要严格的弱排序(小于或大于类型比较),而不是相等。您可以省略比较函子参数并为std::string
. 这通过字符串的字典比较来实现严格的弱排序:
typedef map<string, string> MAP_STRING2STRING;
这相当于
typedef map<string, string, less<string> > MAP_STRING2STRING;
在内部,map 使用严格的弱排序比较来对自身进行排序,并确定两个键是否相等。
第三个模板参数允许您使用自定义排序标准实例化地图。例如,这将创建一个与上述相反排序的地图:
typedef map<string, string, greater<string> > MAP_STRING2STRING;
如果您想要一个从std::string
to的简单地图std::string
,只需使用map<string, string>
(删除那个equal_to<string>
虚假的“比较器”)。
此外,由于您有一个名为“ map
”的变量,这可能会导致与 STLmap
类发生冲突。要么更改变量名(例如调用它myMap
),要么使用类的std::
命名空间前缀std::map
:
typedef map<string, string> MAP_STRING2STRING;
....
MAP_STRING2STRING myMap;
此外,由于您使用的是 VS2010 的错误消息,您可以使用方便的auto
C++11 关键字,以避免“混乱” MAP_STRING2STRING::const_iterator
,只需使用:
auto iter = myMap.find(someKey);