Jaki jest najlepszy sposób określenia, czy mapa STL zawiera wartość dla danego klucza?Ustal, czy mapa zawiera wartość klucza?
#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;
}
Badanie to w debugger, wygląda iter
jest tylko dane na śmieci.
Gdybym odkomentowaniu tę linię:
Bar b2 = m[2]
Debuger pokazuje, że b2
jest {i = 0}
. (Zgaduję, że oznacza to, że użycie niezdefiniowanego indeksu zwróci strukturę ze wszystkimi pustymi/niezainicjowanymi wartościami?)
Żadna z tych metod nie jest tak dobra. To, co naprawdę chciałbym, to taki interfejs:
bool getValue(int key, Bar& out)
{
if (map contains value for key)
{
out = map[key];
return true;
}
return false;
}
Czy istnieje coś takiego?
możliwe duplikat [Jak się dowiedzieć, czy dany klucz istnieje w C++ std :: map] (http://stackoverflow.com/questions/1939953/how-to-find-if-a-given -key-exists-in-ac-stdmap) – OrangeDog