Domine o `sort()` em C++: Guia Completo com Exemplos

Dominando a Função sort() na Biblioteca Padrão C++

Introdução à Ordenação com sort()

A função sort(), integrante da Biblioteca Padrão C++ (STL), é uma ferramenta eficaz para organizar sequências de elementos. Ela oferece um método prático e eficiente para dispor dados em ordem crescente ou decrescente, utilizando critérios predefinidos ou personalizados. Este artigo explora detalhadamente os recursos e aplicações da função sort() na STL.

Ordenação Básica: Organizando seus Dados

A aplicação mais comum da função sort() é a ordenação de um conjunto de elementos em sequência crescente. A sua estrutura básica é:

cpp

std::sort(iterador_inicial, iterador_final);

Onde iterador_inicial aponta para o primeiro elemento da sequência e iterador_final aponta para a posição seguinte ao último elemento da sequência.

Para exemplificar, veja como ordenar um vetor de números inteiros de maneira crescente:

cpp

#include <iostream>

#include <vector>

#include <algorithm>

int main() {

std::vector<int> numeros {5, 3, 7, 1, 9};

std::sort(numeros.begin(), numeros.end());

for (int numero : numeros) {

std::cout << numero << " ";

}

return 0;

}

O resultado deste programa é:



1 3 5 7 9

Ordenação em Ordem Decrescente

Para organizar os elementos de forma decrescente, podemos usar a função std::greater<>, que cria um objeto comparador para inverter a ordem. A sintaxe é:

cpp

std::sort(iterador_inicial, iterador_final, std::greater<>{});

Por exemplo, o código abaixo organiza um vetor de números inteiros em ordem decrescente:

cpp

#include <iostream>

#include <vector>

#include <algorithm>

int main() {

std::vector<int> numeros {5, 3, 7, 1, 9};

std::sort(numeros.begin(), numeros.end(), std::greater<>{});

for (int numero : numeros) {

std::cout << numero << " ";

}

return 0;

}

O resultado do programa é:



9 7 5 3 1

Ordenação com Critérios Personalizados

A função sort() possibilita a ordenação de objetos customizados com base em critérios específicos. Para isso, é necessário criar uma função de comparação que implemente o operador (). Essa função deve retornar um valor booleano indicando a precedência entre dois elementos.

Considere uma classe Pessoa com os atributos nome e idade. A função de comparação para ordenar por nome seria:

cpp

class Pessoa {

public:

std::string nome;

int idade;

};

bool compararPorNome(const Pessoa& p1, const Pessoa& p2) {

return p1.nome < p2.nome;

}

A seguir, podemos utilizar a função sort() com essa função de comparação para ordenar um vetor de pessoas por nome:

cpp

#include <iostream>

#include <vector>

#include <algorithm>

int main() {

std::vector<Pessoa> pessoas {

{"João", 30},

{"Maria", 25},

{"Pedro", 35},

{"Ana", 20}

};

std::sort(pessoas.begin(), pessoas.end(), compararPorNome);

for (const Pessoa& pessoa : pessoas) {

std::cout << pessoa.nome << " ";

}

return 0;

}

A saída do programa será:



Ana João Maria Pedro

Desempenho da Função sort()

A complexidade temporal da função sort() é de O(N log N), onde N é o número de elementos a serem ordenados. Isso significa que o tempo de execução cresce logaritmicamente em relação ao número de elementos.

Conclusão: A Importância de sort()

A função sort(), presente na Biblioteca Padrão C++, é uma ferramenta poderosa para organizar dados de forma eficiente, usando critérios predefinidos ou personalizados. Essencial para qualquer programador C++, ela é aplicável em diversas situações.

Dominar o uso de sort() melhora o desempenho e a clareza do código C++. Tire proveito dos recursos de ordenação da STL para otimizar seus programas.

Perguntas Frequentes sobre a Função sort()

1. Qual a complexidade temporal da função sort()?
R: O(N log N)

2. Como ordenar elementos em ordem decrescente com sort()?
R: Utilize a função std::greater<> como argumento comparador.

3. É possível usar sort() com objetos personalizados?
R: Sim, através da definição de uma função de comparação customizada que implemente o operador ().

4. Qual a diferença entre ordenação estável e instável?
R: A ordenação estável preserva a ordem relativa de elementos iguais, enquanto a instável não garante isso. A função sort() da STL é instável.

5. Existe uma função para ordenação parcial de elementos?
R: Sim, a função std::partial_sort() ordena os N primeiros elementos de um intervalo.

6. Como juntar dois vetores ordenados?
R: Use a função std::merge() para combinar dois vetores ordenados em um único vetor ordenado.

7. Qual a diferença entre std::sort() e std::stable_sort()?
R: std::sort() é a versão instável da ordenação, enquanto std::stable_sort() é a versão estável.

8. Quais as vantagens de sort() da STL em relação a funções de ordenação personalizadas?
R: sort() da STL é altamente otimizada e testada, oferecendo desempenho e confiabilidade superiores.