Método de clasificación personalizado para el patrón de par de la STL

C++C++Beginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderá cómo crear un método de clasificación personalizado para un par de plantillas y cómo implementarlo utilizando un vector en el lenguaje de programación C++. Este laboratorio asume que tiene conocimientos previos de los conceptos básicos de la programación en C++ y del concepto de la plantilla de par. Si es nuevo en estos temas, se recomienda revisar los tutoriales correspondientes antes de continuar.

Crea un vector vacío y rellénalo con elementos

Comenzaremos declarando un vector vacío de pares y luego lo llenaremos con algunos elementos.
En este paso, crearemos un vector vacío.

#include <iostream>
#include <bits/stdc++.h>

using namespace std;

int main() {
  vector<pair<int, int>> v;

  return 0;
}

En este bloque de código, simplemente incluimos los archivos de encabezado necesarios y declaramos un vector vacío de pares.

Rellena el vector con elementos

Después de crear un vector vacío, podemos agregar elementos a él. Vamos a agregar elementos utilizando el método push_back de la clase vector. En este caso, estamos agregando pares de enteros al vector.

int main() {
  vector<pair<int, int>> v;
  v.push_back(make_pair(1, 5));
  v.push_back(make_pair(1, 3));
  v.push_back(make_pair(2, 6));
  v.push_back(make_pair(2, 4));
  v.push_back(make_pair(5, 24));

  return 0;
}

En este bloque de código, agregamos 5 pares al vector v.

Crea un método de clasificación personalizado

Para crear un método de clasificación personalizado, primero debemos definir una función de comparación. La función de comparación comparará dos pares y devolverá un valor booleano que indique si el primer par es menor que el segundo par. En este caso, compararemos el primer elemento de cada par y, si son iguales, compararemos los segundos elementos de los pares.

bool cmp(pair<int, int> x, pair<int, int> y)
{
    if (x.first!= y.first)
        return x.first < y.first;
    else
        return x.second < y.second;
}

En este bloque de código, hemos creado una función de comparación que toma dos pares de enteros como argumentos y devuelve un valor booleano según nuestras condiciones especificadas. La función primero compara el primer elemento de cada par. Si no son iguales, la función devuelve el resultado de la comparación. Si son iguales, la función compara el segundo elemento del par y devuelve el resultado de la comparación.

Utiliza sort para ordenar el vector

En este paso, ordenaremos los elementos del vector según el método de clasificación personalizado que creamos en el paso anterior. Para ordenar el vector, debemos llamar al método sort de la STL con el vector como argumento y pasar el método de clasificación personalizado como tercer argumento.

int main() {
  vector<pair<int, int>> v;
  v.push_back(make_pair(1, 5));
  v.push_back(make_pair(1, 3));
  v.push_back(make_pair(2, 6));
  v.push_back(make_pair(2, 4));
  v.push_back(make_pair(5, 24));


  sort(v.begin(), v.end(), cmp);

  return 0;
}

En este bloque de código, hemos ordenado el vector v utilizando el método sort de la STL. Hemos pasado el método de clasificación personalizado cmp como tercer parámetro.

Imprime el vector ordenado

En este paso, imprimiremos los elementos del vector ordenado. Iteraremos a través del vector utilizando un bucle for e imprimiremos el primer y segundo elemento de cada par.

int main() {
  // código anterior

  for (auto p : v)
  {
      cout << p.first << " " << p.second << endl;
  }
  return 0;
}

En este último bloque de código, hemos utilizado un bucle for-each para acceder a los pares en el vector e imprimirlos en la consola. Ahora, ejecutemos el código para ver los resultados.

Ejecuta el código

Para ejecutar el código, debes compilarlo utilizando el siguiente comando:

g++ ~/project/main.cpp -o main &&./main

Después de ejecutar el código, verás los pares ordenados impresos en orden ascendente.

Ejemplo de código completo

#include <iostream>
#include <bits/stdc++.h>

using namespace std;

bool cmp(pair<int, int> x, pair<int, int> y)
{
    if (x.first!= y.first)
        return x.first < y.first;
    else
        return x.second < y.second;
}

int main() {
    vector<pair<int, int>> v;
    v.push_back(make_pair(1, 5));
    v.push_back(make_pair(1, 3));
    v.push_back(make_pair(2, 6));
    v.push_back(make_pair(2, 4));
    v.push_back(make_pair(5, 24));

    sort(v.begin(), v.end(), cmp);

    for (auto p : v)
    {
        cout << p.first << " " << p.second << endl;
    }
    return 0;
}

Resumen

En este laboratorio, aprendimos cómo crear un método de clasificación personalizado para un patrón de par y implementarlo utilizando un vector en C++. Creamos un vector vacío, agregamos elementos a él, creamos una función de comparación, utilizamos la función sort para ordenar los elementos del vector utilizando nuestro método de clasificación personalizado e imprimimos el vector ordenado. El método de clasificación personalizado se puede utilizar para ordenar los pares en el vector según algunos requisitos o condiciones específicos que definimos en el código.