Witajcie,
Jak mogę zwrócić wartość kontenera std::map o konkretnym kluczu? Na cppreference.com pisze, że .at()
zwraca referencje, a użycie operatora []
tworzy pusty obiekt przy sprawdzaniu wartości.
Witajcie,
Jak mogę zwrócić wartość kontenera std::map o konkretnym kluczu? Na cppreference.com pisze, że .at()
zwraca referencje, a użycie operatora []
tworzy pusty obiekt przy sprawdzaniu wartości.
Wyszukaj za pomocą
map.find
std::map<std::string, int> map;
int returnValue(std::string x)
{
auto found = map.find(x);
if(found != map.end())
{
//znaleziono
return *found->second;
}
}
Użyj .at()
.
int returnValue(std::string x)
{
return map[x];
}
jeśli nie znajdzie to zwróci zero.
Czego z opisu w dokumentacji nie rozumiesz?
Mając mapę {klucz: 'wartość', klucz2: 'wartość2'}
map.at(klucz2)
zwróci 'wartość2'
map.at(klucz3)
rzuci wyjątek
map[klucz2]
zwróci 'wartość2'
map[klucz3]
utworzy nową zmienną typu wartości mapy (tutaj np. ' ') doda ją do mapy i ją zwróci (czyli mapa po wykonaniu operatora[] będzie wyglądała tak: {klucz: 'wartość', klucz2: 'wartość2', klucz3: ''}
)
Jeszcze takie pytanie (OT). Jak mam map<string, bool>::iterator
to jak przypisać wartość (odczytać umiem bo przez iterator.second())? Na www.cplusplus.com nie mogę znajść o iteratorze do map.
mapa["abc"]=true;
map<string, bool>::iterator it=mapa.find("abc");
if(it!=mapa.end()) it->second=!it->second;