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 になります。