Chcę iterować po każdym elemencie, map<string, int>
nie znając żadnej z jego wartości string-int ani kluczy.
Co mam do tej pory:
void output(map<string, int> table)
{
map<string, int>::iterator it;
for (it = table.begin(); it != table.end(); it++)
{
//How do I access each element?
}
}
c++
dictionary
Bez nazwy
źródło
źródło
Odpowiedzi:
Możesz to osiągnąć w następujący sposób:
Z C ++ 11 (i nowszymi) ,
Z C ++ 17 (i nowszymi) ,
źródło
auto const& [key, val] : symbolTable
formatu!Spróbuj wykonać następujące czynności
To samo można zapisać za pomocą zwykłej pętli for
Weź pod uwagę, że typ wartości dla
std::map
jest definiowany w następujący sposóbZatem w moim przykładzie p jest stałą odniesieniem do typu wartość, gdzie kluczem jest,
std::string
a T jestint
Byłoby również lepiej, gdyby funkcja została zadeklarowana jako
źródło
value_type
Tematycemap
jestpair
zawierający klucz i wartość, jak tofirst
isecond
odpowiednio członka,.Lub z C ++ 11, używając opartego na zakresie dla:
źródło
Jak mówi @Vlad z Moskwy, weź pod uwagę, że
value_type
dlastd::map
jest zdefiniowany w następujący sposób:Oznacza to, że jeśli chcesz zastąpić słowo kluczowe
auto
bardziej precyzyjnym specyfikatorem typu, możesz to zrobić;Tylko dla zrozumienia, co
auto
w tym przypadku przełoży się na.źródło