我在if语句中使用了map.find(key)和map.end()函数:
if( p_Repos->returnTypeMap().find(tc[0]) != p_Repos->returnTypeMap().end() )
但它不起作用,我得到一个Microsoft Visual C ++运行时库错误,告诉我“表达式:列表迭代器不兼容”。 tc [0]只是一个字符串,我的地图中的键位置是一个字符串。
但是,它们应该兼容,对吗?
非常感谢任何帮助。
谢谢, 汤姆
编辑:基于此处的答案:Finding value in unordered_map,我认为这应该可以解决问题。
第二次编辑:
这是returnTypeMap()函数:
std::unordered_map <std::string, std::pair<std::string, std::string>> returnTypeMap()
{
return typeTable;
}
以下是我的地图的定义:
std::unordered_map <std::string, std::pair<std::string, std::string>> typeTable;
答案 0 :(得分:5)
您将按值返回map
,因此每次调用都会评估为完全不同的map
。进入不同容器的迭代器不兼容,并且尝试比较它们具有未定义的行为。
尝试将代码更改为const
引用返回:
std::unordered_map<std::string, std::pair<std::string, std::string>> const&
returnTypeMap() const
{
return typeTable;
}
或制作地图的本地副本,并在单个本地副本上调用find
和end
:
auto typeTable{p_Repos->returnTypeMap()};
if (typeTable.find(tc[0]) != typeTable.end()) {
//...
}