C ++ STL | Ordenar un mapa basado en los valores en lugar de teclas

Aprender – cómo ordenar un mapa determinado sobre la base de valores en lugar de llaves en STL C ++ con el ejemplo?

Un mapa STL en C ++ normalmente se ordenan en función de sus teclas. Pero puede haber casos en los que se requiere para ordenar el mapa basado en los valores. En este artículo, vamos a discutir cómo ordenar un mapa basado en los valores en lugar de llaves.

Antes de entrar en detalle Tomemos un ejemplo de problema de entender cuando hacemos que necesitan clasificarse basada en valor, no las teclas.

Un problema muy popular es la clasificación de una matriz o lista en función de la frecuencia. Lo que hacemos no vamos a crear el mapa para almacenar la frecuencia. Ahora el mapa está ordenada en función de las teclas, pero es obligatorio el mapa para ser ordenados en función del valor. ¿Así que lo que podemos hacer?

Podemos utilizar la cola de prioridad y la función propia comparador para ordenar el mapa. Antes de leer este artículo, por favor ir a través de nuestro artículo sobre cómo definir su cola de prioridad class comparador de STL C ++.

Lo que es un elemento del mapa?

Say el mapa es & lt; T, T & gt; donde T puede ser cualquier tipo de datos
Cada elemento del mapa es un par & lt; T, T & gt;

cola de prioridad Sintaxis class usando STL:

priority_queue<T,vector<T>,decltype(comp)> pq(comp);

donde t es el tipo genérico de los elementos y comp es la función comparador
Así que en el for del mapa, que sería,

priority_queue<pair<T,T>,vector< pair<T,T>>,decltype(comp)> pq(comp);

como pair & lt; T, T & gt; es el elemento del mapa

Ahora, podemos definir nuestra función de comparación de acuerdo con la lógica necesaria.

Vamos a discutir el problema ahora que empezamos la clasificación que se basa en el valor. Si el valor for dos claves es el mismo tipo sobre la base de la clave.

dicen que el mapa es el mapa de & lt; case, for & gt; mi mapa.

Key	value
1 6
2 8
6 3
9 8

Compruebe el siguiente código para ver la aplicación y el resultado detallado para ver el mapa ordenada.

programa en C ++ para ordenar un mapa basado en valores en lugar de teclas

#include <bits/stdc++.h>
using namespace std;
void sort_map_on_value(map<int, int> mymap)
{
//comparator lambda function
auto comp = [](pair<int, int> a, pair<int, int> b) {
//comparison logic
//if value is greater for the first element
//no need to swap
if (a.second > b.second)
return false;
//if value is less for the first element
//need to swap
else if (a.second < b.second)
return true;
else { // when values are same
if (a.first < b.first) {
return false;
}
else
return true;
}
};
priority_queue<pair<int, int>, vector<pair<int, int> >, decltype(comp)> pq(comp);
for (auto& ij : mymap) {
pq.push(ij);
}
//printing the sorted map
cout << "key valuen";
while (!pq.empty()) {
cout << pq.top().first << " " << pq.top().second << endl;
pq.pop();
}
}
void print(map<int, int> mymap)
{
cout << "key valuen";
for (auto & [ key, value ] : mymap)
cout << key << " " << value << endl;
}
int main()
{
map<int, int> mymap;
mymap[1] = 6;
mymap[2] = 8;
mymap[6] = 3;
mymap[8] = 2;
cout << "before sorting map is:n";
print(mymap);
cout << "after sorting based on value map is: n";
sort_map_on_value(mymap);
return 0;
}

Salida:

before sorting map is:
key value
1 6
2 8
6 3
8 2
after sorting based on value map is:
key value
2 8
1 6
6 3
8 2


Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *