Jak zwrócić wartość std::map?

Jak zwrócić wartość std::map?
bajos
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: UwUdź
  • Postów: 267
0

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.

TF
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 26
0

Wyszukaj za pomocą

Kopiuj
map.find
Kopiuj
std::map<std::string, int> map;
int returnValue(std::string x)
{
auto found = map.find(x);
if(found  != map.end())
{
 //znaleziono
return *found->second;
}
}
n0name_l
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2412
2

Użyj .at().

Azarien
  • Rejestracja: dni
  • Ostatnio: dni
0
Kopiuj
int returnValue(std::string x)
{
  return map[x];
}

jeśli nie znajdzie to zwróci zero.

kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
3

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: ''})

bajos
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: UwUdź
  • Postów: 267
0

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.

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
2
Kopiuj
mapa["abc"]=true;
map<string, bool>::iterator it=mapa.find("abc");
if(it!=mapa.end()) it->second=!it->second;

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.