Ordina map per valore in C++
-
Usa l’algoritmo
std::vector
estd::sort
per ordinare gli elementi della mappa in base al valore in C++ -
Usa
std::map
estd::map::emplace
per ordinare gli elementi della mappa per valore in C++
Questo articolo illustrerà più metodi su come ordinare la mappa in base ai valori in C++.
Usa l’algoritmo std::vector
e std::sort
per ordinare gli elementi della mappa in base al valore in C++
std::map
è un contenitore associativo che può memorizzare coppie chiave-valore con chiavi univoche, e queste ultime sono usate per ordinare automaticamente gli elementi nell’oggetto. In questo caso, stiamo dichiarando un oggetto std::map
di esempio con stringhe intere come chiavi e stringhe regolari come valori. Il problema è ordinare questi elementi in base ai valori delle stringhe.
Non possiamo usare direttamente l’algoritmo std::sort
sulla struttura std::map
, quindi dobbiamo inizializzare un altro oggetto che può essere ordinato. Pertanto, la dichiarazione dello std::vector
contiene le coppie dello stesso tipo. Costruiamo elementi vettore
usando il cicli for
e il metodo emplace_back
. Una volta che il bucle è stato eseguito, il vector
è pronto per essere passato all’algoritmo std::sort
. Si noti che specifichiamo l’espressione lambda per definire la funzione di confronto degli elementi e confronta solo i secondi membri. Infine, possiamo produrre gli elementi std::vector
come una rappresentazione di mappa ordinata.
#include <iostream>
#include <map>
#include <vector>
using std::cin;
using std::cout;
using std::endl;
using std::map;
using std::string;
using std::vector;
int main() {
map<string, string> veggy_map = {{
"1",
"Yam",
},
{
"2",
"Pumpkin",
},
{
"3",
"Ginger",
},
{
"4",
"Melon",
},
{
"5",
"Beetroot",
},
{
"6",
"Spinach",
}};
cout << "Unsorted - " << endl;
for (const auto &[key, value] : veggy_map) {
cout << key << " : " << value << endl;
}
vector<std::pair<string, string> > arr;
for (const auto &item : veggy_map) {
arr.emplace_back(item);
}
std::sort(arr.begin(), arr.end(),
[](const auto &x, const auto &y) { return x.second < y.second; });
cout << "Sorted - " << endl;
for (const auto &[key, value] : arr) {
cout << key << " : " << value << endl;
}
return EXIT_SUCCESS;
}
Produzione:
Sorted -
5 : Beetroot
3 : Ginger
4 : Melon
2 : Pumpkin
6 : Spinach
1 : Yam
Usa std::map
e std::map::emplace
per ordinare gli elementi della mappa per valore in C++
La soluzione precedente non si occupava dello stesso oggetto std::map
e utilizzava una struttura esterna per l’ordinamento. In questo caso, implementiamo una soluzione per memorizzare gli elementi ordinati per valore in un altro oggetto std::map
. Ciò può essere ottenuto utilizzando la funzione mappa incorporata - emplace
. Vale a dire, dichiariamo un altro oggetto map
e costruiamo i suoi elementi usando il metodo emplace
, ma passiamo anche le coppie chiave-valore invertite. Di conseguenza, il contenitore map
ordina automaticamente gli elementi in base alle chiavi: i valori nell’oggetto map
precedente. Successivamente, possiamo usare l’oggetto map
ordinato per altre operazioni che potrebbero essere necessarie nei seguenti blocchi di codice senza preoccuparci che sia memorizzato in un oggetto diverso.
#include <iostream>
#include <map>
#include <vector>
using std::cin;
using std::cout;
using std::endl;
using std::map;
using std::string;
using std::vector;
int main() {
map<string, string> veggy_map = {{
"1",
"Yam",
},
{
"2",
"Pumpkin",
},
{
"3",
"Ginger",
},
{
"4",
"Melon",
},
{
"5",
"Beetroot",
},
{
"6",
"Spinach",
}};
cout << "Unsorted - " << endl;
for (const auto& [key, value] : veggy_map) {
cout << key << " : " << value << endl;
}
cout << "Sorted - " << endl;
map<string, string> veggy_map2;
for (const auto& [key, value] : veggy_map) {
veggy_map2.emplace(value, key);
}
for (const auto& [key, value] : veggy_map2) {
cout << value << " : " << key << endl;
}
return EXIT_SUCCESS;
}
Produzione:
Sorted -
5 : Beetroot
3 : Ginger
4 : Melon
2 : Pumpkin
6 : Spinach
1 : Yam
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