PDA

Visualizza la versione completa : [C++] Sfogliare elementi di una map tramite ciclo for


Peppyno
05-06-2015, 21:46
Salve a tutti,
Sto iniziando a prendere un po la mano con l'uso delle "map".
In questo programma che sto facendo come esercitazione x l'universitÓ, mi ritrovo a dover visitare tutti gli elementi di una map, che Ŕ membro di una classe.
Ho letto in giro che gli elementi vengono visitati cosi:

map->first, map->second, map->third

ora il problema Ŕ che io vorrei fare lo stesso pero tramite un ciclo for... come cn un array.
Ŕ fattibile???

GRAZIE!!

oregon
05-06-2015, 22:06
Salve a tutti,
come cn un array.
Ŕ fattibile???


http://www.cplusplus.com/reference/map/map/operator[]/

shodan
05-06-2015, 22:14
map->third non esiste.
Per scansionare una map puoi usare:



for (auto& it : my_map) {
cout << it.first << '\n';
cout << it.second << '\n';
}

Peppyno
05-06-2015, 22:18
Quindi .first e .second indicano l'elemento primo e l'elelemento secondo degli elementi che compongono la map????

Peppyno
05-06-2015, 22:27
Ad esempio per inserire 3 elementi in una map cosa dovrei aggiungere per far capire che il numero di elementi Ŕ 3?



for (auto& it : my_map) {
it.first = /*numero casuale*/;
it.second = /*numero casuale*/;
}

shodan
05-06-2015, 22:29
Una mappa Ŕ composta da una serie di coppie (std::pair<> per la precisione) chiave/valore i cui campi sono appunto .first e .second.
Per avere tre elementi devi inserire tre coppie.
Modo 1)


std::map<int,int> myMap;
myMap.insert(std::make_pair(3,5)); // etc

Modo 2)


std::map<int,int> myMap;
myMap[3]=5; // etc


Occhio che le chiavi sono uniche per cui puoi inavvertitamente sovrascrivere un valore se usi la stessa chiave d'accesso.

http://en.cppreference.com/w/cpp/container/map

Peppyno
05-06-2015, 22:35
Quindi...

[CODE]
for (auto& it : my_map) {

}

Peppyno
05-06-2015, 22:38
Quindi...



for (auto& it : my_map) {
for(i=0; i<3; i++){
pair<int, int> = {NUMERO , NUMERO}
}
}

shodan
05-06-2015, 22:44
Quel che hai scritto non ha senso. Leggi le modifiche al precedente post.

Peppyno
05-06-2015, 23:12
Grazie mille, ho utilizzato il metodo 1



std::map<int,int> myMap;
for(i=0; i<3; i++){
myMap.insert(std::make_pair(3,5)); // etc
}


Ora se volessi visualizzarli:


for (it=myMap.begin(); it!=myMap.end(); ++it) {
cout << it.first << '\n';
cout << it.second << '\n';
}




????

Loading