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.



