Usa un contenitore di mappe STL in C++
-
Usa
std::map
per dichiarare un oggetto contenitore mappa in C++ -
Usa la funzione membro
find
per cercare un elemento specifico in una mappa in C++ -
Utilizzare la funzione membro
insert
per memorizzare un elemento in una mappa in C++ -
Usa la funzione membro
merge
per unire elementi di due oggetti mappa in C++
Questa guida ti mostrerà diversi metodi su come utilizzare il contenitore di mappe STL in C++.
Usa std::map
per dichiarare un oggetto contenitore mappa in C++
Il contenitore std::map
implementa una struttura dati di coppia chiave-valore ordinata, in cui le chiavi sono univoche. I valori chiave ordinano gli elementi della coppia in ordine crescente per impostazione predefinita; tuttavia, l’utente può opzionalmente passare una funzione di confronto al modello std::map
. È possibile inizializzare l’oggetto map
con un elenco di valori in cui ogni elemento è specificato tra parentesi graffe separate. In questo caso, creiamo una mappa di coppie stringhe
e poi ne stampiamo elementi nel flusso cout
. Nota che ogni elemento è accessibile come membri std::pair
nel cicli for
.
#include <iostream>
#include <map>
using std::cout;
using std::endl;
using std::map;
using std::string;
template <typename Map>
void printMap(Map& m) {
for (auto& p : m) cout << p.first << " : " << p.second << ";" << endl;
cout << endl;
}
int main() {
std::map<string, string> m1 = {
{"11900K", "Core i9"},
{"11700K", "Core i7"},
{"11600K", "Core i5"},
{"1390P", "Xeon W"},
};
printMap(m1);
return EXIT_SUCCESS;
}
Produzione:
11600K : Core i5;
11700K : Core i7;
11900K : Core i9;
1390P : Xeon W;
Usa la funzione membro find
per cercare un elemento specifico in una mappa in C++
La funzione membro find
è utile per cercare una coppia chiave-valore specifica nel contenitore map
. L’operazione di ricerca ha complessità logaritmica. La funzione find
prende il riferimento a una chiave e restituisce l’iteratore all’elemento con la chiave equivalente. Quando non viene trovato alcun elemento con la chiave specificata, viene restituito un iteratore passato alla fine.
Il seguente frammento di codice mostra come inizializzare un nuovo contenitore map
con gli iteratori di intervallo. Si noti che il primo iteratore viene recuperato utilizzando la funzione find
. Inoltre, può essere utile controllare la validità dell’iteratore restituito.
#include <cassert>
#include <iostream>
#include <map>
using std::cout;
using std::endl;
using std::map;
using std::string;
template <typename Map>
void printMap(Map& m) {
for (auto& p : m) cout << p.first << " : " << p.second << ";" << endl;
cout << endl;
}
int main() {
std::map<string, string> m1 = {
{"11900K", "Core i9"},
{"11700K", "Core i7"},
{"11600K", "Core i5"},
{"1390P", "Xeon W"},
};
std::map<string, string> m2(m1.find("11700K"), m1.end());
printMap(m2);
auto ret = m1.find("11700K");
assert(ret != m1.end());
std::map<string, string> m3(ret, m1.end());
printMap(m3);
return EXIT_SUCCESS;
}
Produzione:
11700K : Core i7;
11900K : Core i9;
1390P : Xeon W;
Utilizzare la funzione membro insert
per memorizzare un elemento in una mappa in C++
È possibile aggiungere nuovi elementi al contenitore map
esistente utilizzando la funzione membro insert
. Il membro insert
prende il riferimento all’oggetto da aggiungere e restituisce un container std::pair
costituito da un iteratore dell’elemento inserito e da un valore bool
che indica lo stato di inserimento riuscito. Quando l’inserimento fallisce, l’iteratore punta all’elemento che ha impedito l’operazione.
#include <iostream>
#include <map>
using std::cout;
using std::endl;
using std::map;
using std::string;
template <typename Map>
void printMap(Map& m) {
for (auto& p : m) cout << p.first << " : " << p.second << ";" << endl;
cout << endl;
}
int main() {
std::map<string, string> m1 = {
{"11900K", "Core i9"},
{"11700K", "Core i7"},
{"11600K", "Core i5"},
{"1390P", "Xeon W"},
};
auto ret1 = m1.insert({"1390P", "Xeon W"});
if (!ret1.second) {
cout << "Not inserted!" << endl;
}
ret1 = m1.insert({"1390", "Xeon W"});
if (!ret1.second) {
cout << "Not inserted!" << endl;
}
printMap(m1);
return EXIT_SUCCESS;
}
Produzione:
Not inserted !11600K : Core i5;
11700K : Core i7;
11900K : Core i9;
1390 : Xeon W;
1390P : Xeon W;
Usa la funzione membro merge
per unire elementi di due oggetti mappa in C++
La funzione membro merge
può essere utilizzata per unire gli elementi da due contenitori di mappe. Viene chiamato dall’oggetto map
che ha bisogno di memorizzare gli elementi combinati e prende un’altra map
come argomento. Dopo l’operazione, tutti i puntatori ei riferimenti agli elementi trasferiti sono validi.
#include <iostream>
#include <map>
using std::cout;
using std::endl;
using std::map;
using std::string;
template <typename Map>
void printMap(Map& m) {
for (auto& p : m) cout << p.first << " : " << p.second << ";" << endl;
cout << endl;
}
int main() {
std::map<string, string> m1 = {
{"11900K", "Core i9"},
{"11700K", "Core i7"},
{"11600K", "Core i5"},
{"1390P", "Xeon W"},
};
std::map<string, string> m4 = {
{"11900KF", "Core i9"}, {"11600T", "Core i5"}, {"11700K", "Core i7"}};
m1.merge(m4);
printMap(m1);
return EXIT_SUCCESS;
}
Produzione:
11600K : Core i5;
11600T : Core i5;
11700K : Core i7;
11900K : Core i9;
11900KF : Core i9;
1390P : Xeon W;
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook