Método de Ordenação Personalizado para Template Pair da STL

C++Beginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá como criar um método de ordenação personalizado para um template pair e implementá-lo usando um vector na linguagem de programação C++. Este laboratório assume que você tem conhecimento prévio dos fundamentos da programação C++ e do conceito do template pair. Se você é novo nesses tópicos, é recomendado que revise os tutoriais correspondentes antes de prosseguir.

Criar um Vector Vazio e Preenchê-lo com Elementos

Começaremos declarando um vector vazio de pairs e, em seguida, preenchê-lo-emos com alguns elementos.
Nesta etapa, criaremos um vector vazio.

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

using namespace std;

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

  return 0;
}

Neste bloco de código, apenas incluímos os arquivos de cabeçalho necessários e declaramos um vector vazio de pairs.

Preencher o Vector com Elementos

Após criar um vector vazio, podemos adicionar elementos a ele. Adicionaremos elementos usando o método push_back da classe vector. Neste caso, estamos adicionando pares de inteiros ao 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;
}

Neste bloco de código, adicionamos 5 pairs ao vector v.

Criar um Método de Ordenação Personalizado

Para criar um método de ordenação personalizado, precisamos primeiro definir uma função de comparação. A função de comparação irá comparar dois pairs e retornar um valor booleano indicando se o primeiro pair é menor que o segundo pair. Neste caso, compararemos o primeiro elemento de cada pair e, se forem iguais, compararemos os segundos elementos dos pairs.

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;
}

Neste bloco de código, criamos uma função de comparação que recebe dois pairs de inteiros como argumentos e retorna um valor booleano com base em nossas condições especificadas. A função primeiro compara o primeiro elemento de cada pair. Se eles não forem iguais, a função retorna o resultado da comparação. Se forem iguais, a função compara o segundo elemento do pair e retorna o resultado da comparação.

Usar sort para Ordenar o Vector

Nesta etapa, ordenaremos os elementos no vector com base no método de ordenação personalizado que criamos na etapa anterior. Para ordenar o vector, precisamos chamar o método sort da STL com o vector como seus argumentos e passar o método de ordenação personalizado como o terceiro 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;
}

Neste bloco de código, ordenamos o vector v usando o método sort da STL. Passamos o método de ordenação personalizado cmp como o terceiro parâmetro.

Imprimir o Vector Ordenado

Nesta etapa, imprimiremos os elementos do vector ordenado. Iteraremos pelo vector usando um loop for e imprimiremos o primeiro e o segundo elementos de cada pair.

int main() {
  // previous code

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

Neste bloco de código final, usamos um loop for-each para acessar os pairs no vector e imprimi-los no console. Agora, vamos executar o código para ver os resultados.

Executar o Código

Para executar o código, você precisa compilá-lo usando o seguinte comando:

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

Após executar o código, você verá os pairs ordenados impressos em ordem crescente.

Exemplo 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;
}

Resumo

Neste laboratório, aprendemos como criar um método de ordenação personalizado para um template pair e implementá-lo usando um vector em C++. Criamos um vector vazio, adicionamos elementos a ele, criamos uma função de comparação, usamos a função sort para ordenar os elementos no vector usando nosso método de ordenação personalizado e imprimimos o vector ordenado. O método de ordenação personalizado pode ser usado para ordenar os pairs no vector com base em alguns requisitos ou condições específicas que definimos no código.