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

Odpowiedz Nowy wątek
2014-12-28 19:20
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.


128 postów [25.06.2015r. 21:03]

Pozostało 580 znaków

2014-12-28 19:25
0

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;
}
}
edytowany 2x, ostatnio: tffsts, 2014-12-28 19:26
Ten kod to mega wtf. - n0name_l 2014-12-28 19:30

Pozostało 580 znaków

2014-12-28 19:30
2

Użyj .at().

Pozostało 580 znaków

2014-12-28 20:28
0
int returnValue(std::string x)
{
  return map[x];
}

jeśli nie znajdzie to zwróci zero.

Ale jak nie znajdzie to utworzy ci klucz :( - Shalom 2014-12-28 20:51
no, z zerem. dzięki temu za każdym razem zwróci zero, za drugim razem już nie przeszukując całej mapy. w czym problem? - Azarien 2014-12-28 21:49

Pozostało 580 znaków

2014-12-28 20:46
kq

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


edytowany 1x, ostatnio: kq, 2014-12-28 20:47

Pozostało 580 znaków

2014-12-28 21:06
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.


128 postów [25.06.2015r. 21:03]
edytowany 1x, ostatnio: bajos, 2014-12-28 21:06

Pozostało 580 znaków

2014-12-28 21:09
2
mapa["abc"]=true;
map<string, bool>::iterator it=mapa.find("abc");
if(it!=mapa.end()) it->second=!it->second;

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
edytowany 1x, ostatnio: _13th_Dragon, 2014-12-28 21:15
@_13th_Dragon, mi chodzi o ::iterator, a to chyba do zwykłej mapy? - bajos 2014-12-28 21:12

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0