STL - map e multimap

Dal quarto capitolo di Designing Components with the C++ STL, di Ulrich Breymann. Parte dedicata ai container associativi ordinati.

Il container associativo map gestisce collezioni di dati acceduti per mezzo di una chiave, secondo la quale sono ordinati gli elementi.

Questo é un piccole esempio d'uso per map:

#include<map>
#include<string>
#include<iostream>

using namespace std;

typedef map<int, string> MyMap;
typedef MyMap::value_type MyValue;
typedef pair<map<int, string>::iterator, bool> InsRet;

int main() {
MyMap myMap;
InsRet ret = myMap.insert(MyValue(836361136, "Andrew"));
if(ret.second == true) {
cout << (*(ret.first)).second << " inserted." << endl;
}
ret = myMap.insert(MyValue(274635328, "Berni"));
if(ret.second == true) {
cout << (*(ret.first)).second << " inserted." << endl;
}
ret = myMap.insert(MyValue(260736622, "John"));
if(ret.second == true) {
cout << (*(ret.first)).second << " inserted." << endl;
}
ret = myMap.insert(MyValue(720002287, "Karen"));
if(ret.second == true) {
cout << (*(ret.first)).second << " inserted." << endl;
}
ret = myMap.insert(MyValue(138373498, "Thomas"));
if(ret.second == true) {
cout << (*(ret.first)).second << " inserted." << endl;
}
ret = myMap.insert(MyValue(135353630, "William"));
if(ret.second == true) {
cout << (*(ret.first)).second << " inserted." << endl;
}
ret = myMap.insert(MyValue(720002287, "Xaviera"));
if(ret.second == false) {
cout << "As expected, item not inserted: key duplicated" << endl;
}

myMap[420602587] = "Willie";
myMap[420602587] = "Willie Nillie";

cout << endl << "The map sorted by key:" << endl;

for(MyMap::iterator it = myMap.begin(); it != myMap.end(); ++it) {
cout << (*it).first << ':' << (*it).second << endl;
}

cout << endl << "Finding an element by key: ";
int key = 720002287;
MyMap::iterator it = myMap.find(key);
if(it != myMap.end()) {
cout << key << " " << (*it).second << endl;
}

cout << "Same, using array notation: ";
cout << key << " " << myMap[key] << endl;
}

La multimap permette di avere chiavi duplicate, questo porta a rendere impossibile implementare l'operatore []. Inoltre, in modo simile a quanto visto per la coppia di classi set/multiset, anche per multimap il metodo insert() ritorna un iteratore all'elemento appena inserito.

Nessun commento:

Posta un commento