マップにキーの値が含まれているかどうかを判断しますか? [重複] 質問する

マップにキーの値が含まれているかどうかを判断しますか? [重複] 質問する

STL マップに特定のキーの値が含まれているかどうかを判断する最適な方法は何ですか?

#include <map>

using namespace std;

struct Bar
{
    int i;
};

int main()
{
    map<int, Bar> m;
    Bar b = {0};
    Bar b1 = {1};

    m[0] = b;
    m[1] = b1;

    //Bar b2 = m[2];
    map<int, Bar>::iterator iter = m.find(2);
    Bar b3 = iter->second;

}

これをデバッガーで調べてみると、iter単なるゴミデータのようです。

この行のコメントを解除すると:

Bar b2 = m[2]

デバッガーはb2であることを示します{i = 0}。(未定義のインデックスを使用すると、すべて空または初期化されていない値を持つ構造体が返されるという意味だと思います。)

どちらの方法もあまり良くありません。私が本当に欲しいのは、次のようなインターフェースです。

bool getValue(int key, Bar& out)
{
    if (map contains value for key)
    {
        out = map[key];
        return true;
    }
    return false;
}

このようなものは存在するのでしょうか?

ベストアンサー1

マップがマルチマップでない限り、最もエレガントな方法の1つはcountメソッドを使用することです。

if (m.count(key))
    // key exists

要素が実際にマップ内に存在する場合、カウントは 1 になります。

おすすめ記事