C++ Standard Template Library (STL)
Aula relacionada recomendada
Conhecendo a STL
A Standard Template Library (STL) do C++ é um conjunto de classes e funções baseadas em templates que implementam estruturas de dados e algoritmos amplamente utilizados, como listas, pilhas, vetores, ordenação, busca, entre outros.
Nesta seção, vamos conhecer as principais estruturas e algoritmos da STL que são usados na programação competitiva.
As estruturas de dados mais comuns são:
| Estrutura | Descrição |
|---|---|
vector |
Armazena elementos como um array, mas pode alterar seu tamanho dinamicamente. A adição e remoção de elementos geralmente ocorrem no final, e os elementos podem ser acessados por índice. |
set |
Armazena elementos únicos de forma ordenada (crescente). Elementos não podem ser acessados por índice. |
map |
Armazena elementos em pares "chave/valor". Pode ser acessado através das chaves, e não pelo índice. |
pair |
Armazena dois valores como um único elemento, onde cada valor pode ter um tipo diferente. O acesso aos valores é feito por meio de first e second. |
stack |
Armazena elementos em uma ordem específica, chamada LIFO (Last In, First Out), onde os elementos podem ser adicionados e removidos apenas do topo (como uma pilha). Não é acessível por índice. |
queue |
Armazena elementos em uma ordem específica, chamada FIFO (First In, First Out), onde os elementos são adicionados no final e removidos da frente (como uma fila). Não é acessível por índice. |
priority_queue |
Armazena elementos em uma ordem específica, os elementos de maior prioridade aparecem primeiro (por padrão, os elementos de maior valor), é parecido com a queue, pois você só pode acessar os elementos da frente, mas aqui a ordem é determinada não pela ordem de inserção. Não é acessível por índice. |
deque |
Armazena elementos em uma fila de duas extremidades (deque), onde os elementos podem ser adicionados e removidos de ambos os lados. Os elementos podem ser acessados por índice. |
Os algoritmos mais comuns são:
| Algoritmo | Descrição |
|---|---|
sort |
Ordena os elementos em uma estrutura de dados. |
reverse |
Inverte a ordem dos elementos em um determinado intervalo. |
swap |
Troca os valores de duas variáveis. |
Template básico para a prática desta seção
Para facilitar nossa prática nessa seção utilizaremos esse template simples para praticar as estruturas:
#include <bits/stdc++.h>
É um arquivo de cabeçalho que já inclui todas as bibliotecas padrão, ou seja, você não precisa dar #include manualmente para cada estrutura de dados ou algoritmo que for usar. Por exemplo, se precisar de vector e set, normalmente teria que incluir #include <vector> e #include <set> separadamente. Com #include <bits/stdc++.h>, tudo isso já vem junto, facilitando o uso e economizando tempo.
using namespace std;
O using namespace std; é uma diretiva no C++ que permite que você use os elementos da biblioteca padrão (std) sem precisar escrever std:: antes de cada um deles. Isso facilita a escrita do código, pois você não precisa digitar std:: repetidamente para acessar coisas como cout, cin, vector, entre outros.
Por exemplo, se você não usar o using namespace std;, seria necessário escrever std::cout, std::cin, std::vector, etc. Com o using namespace std;, basta escrever cout, cin, vector, e o compilador entenderá automaticamente que você está se referindo à versão padrão dessas funções e estruturas.
Estruturas de Dados
Em cada um dos links abaixo, você encontra referências que ensinam a utilizar cada uma das estruturas.
vector: https://www.geeksforgeeks.org/vector-in-cpp-stl/set: https://www.geeksforgeeks.org/set-in-cpp-stl/map: https://www.geeksforgeeks.org/cpp/map-associative-containers-the-c-standard-template-library-stl/pair: https://www.geeksforgeeks.org/pair-in-cpp-stl/stack: https://www.geeksforgeeks.org/stack-in-cpp-stl/queue: https://www.geeksforgeeks.org/queue-cpp-stl/priority_queue: https://www.geeksforgeeks.org/cpp/priority-queue-in-cpp-stl/deque: https://www.geeksforgeeks.org/deque-cpp-stl/
Algoritmos
Em cada um dos links abaixo, você encontra referências que ensinam a utilizar cada um dos algoritmos.
https://www.geeksforgeeks.org/swap-in-cpp/
sort: https://www.geeksforgeeks.org/sort-c-stl/reverse: https://www.geeksforgeeks.org/stdreverse-in-c/swap: https://www.geeksforgeeks.org/swap-in-cpp/
Pro Tip
Conhecer as estruturas e algoritmos básicos da STL vão te ajudar bastante na sua jornada em programação competitiva.