繁体   English   中英

std :: map :: find不起作用

[英]std::map::find doesn't work

我正在尝试将信息保存在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);

Visual C ++出错
我究竟做错了什么?
仅当我在map有内容时才会出现此错误。

你的地图有一种错误的比较函子。 您需要严格的弱排序 (小于或大于类型比较),而不是相等。 您可以省略比较functor参数并使用std::string的小于比较。 这通过字符串的字典比较来实现严格的弱排序:

typedef map<string, string> MAP_STRING2STRING;

这相当于

typedef map<string, string, less<string> > MAP_STRING2STRING;

在内部,地图使用严格的弱排序比较来对自己进行排序,并确定两个键是否相等。

第三个模板参数允许您使用自定义排序条件实例化地图。 例如,这将创建一个具有上述反向排序的地图:

typedef map<string, string, greater<string> > MAP_STRING2STRING;

如果你想要一个从std::stringstd::string的简单映射,只需使用map<string, string> (删除那个equal_to<string> bogus“比较器”)。

此外,由于您有一个名为“ map ”的变量,这可能会导致与STL map类冲突。 更改变量名称(例如,将其命名为myMap ),或者对std::map类使用std:: namespace前缀:

typedef map<string, string> MAP_STRING2STRING;
....
MAP_STRING2STRING myMap;

此外,由于您使用VS2010的错误消息,您可以使用方便的auto C ++ 11关键字,以避免MAP_STRING2STRING::const_iterator的“混乱”,并只使用:

auto iter = myMap.find(someKey);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM