1

次のマップを機能させようとしています。

enum ttype { shift, reduce }
map <string, pair<ttype, int> > lookup;

したがって、これは正常に機能しますが、キーが見つからなかったかどうかを確認する方法が必要です。たとえば、次のような効果があります。

cout << (lookup["a"]==NULL) << endl; // this is wrong, but I am trying to find a way to identify when lookup["a"] does not find a corresponding value

キーが見つからない場合、マップはデフォルトで構築された値を返すようです (たとえば、文字列にマッピングされている場合、空の文字列を返すだけで、lookup["a"] == かどうかを確認できます)。 "" - しかし、 std::pairs のデフォルトの構築値がどうなるかわかりません)。

4

1 に答える 1

0

operator[]見つからない場合はアイテムを追加し、デフォルトの構築済みアイテムを返します。 find()デフォルトで構築されたペアを返すのではなく、マップの最後の値を超えて指す反復子を返します。

auto iter = lookup.find("a");
if (iter != lookup.end()) {
    std::cout << "Key was found :)" << std::endl;
    std::pair<ttype, int> result = iter->second;
    std::cout << "Result was: " << result.second << std::endl;
} else {
    std::cout << "Key was not found" << std::endl;
    // Maybe add the key to the map?
}

Usingfind()はもう少し冗長ですが、読みやすくなります (私の意見では)。

于 2012-11-12T08:47:04.033 に答える