0

if ステートメントで map.find(key) および map.end() 関数を使用しています。

if( p_Repos->returnTypeMap().find(tc[0]) != p_Repos->returnTypeMap().end() ) 

しかし、それは機能せず、"Expression: list iterators incompatible" という Microsoft Visual C++ ランタイム ライブラリ エラーが表示されます。tc[0] は単なる文字列で、マップ内のキーの位置は文字列です。

しかし、互換性があるはずですよね?

どんな助けでも大歓迎です。

ありがとう、トム

編集:ここにある回答に基づいて: Finding value in unordered_map、私はこれがうまくいくはずだと信じています。

2 番目の編集:
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;
4

1 に答える 1

5

by 値を返している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()) {
    //...
}
于 2013-03-16T03:26:11.157 に答える