AnyCompiler

STL Containers e Iterators

std::map<K, V> armazena pares chave-valor, mantendo-os ordenados por chave automaticamente. Iterá-lo com range-based for produz pares chave-valor nessa ordem, com .first e .second te dando a chave e o valor respectivamente.

#include <iostream>
#include <map>
#include <string>
using namespace std;

int main() {
    map<string, int> ages;
    ages["Alice"] = 30;
    ages["Bob"] = 25;

    for (const auto& pair : ages) {
        cout << pair.first << ": " << pair.second << endl;
    }
    return 0;
}
Output
Alice: 30
Bob: 25

std::set

std::set armazena valores únicos em ordem ordenada, descartando automaticamente duplicatas à medida que são inseridas — a mesma estrutura de árvore subjacente que map, só que sem um valor separado anexado a cada chave.

#include <iostream>
#include <set>
using namespace std;

int main() {
    set<int> numbers = {5, 3, 1, 4, 1, 5};
    for (int n : numbers) {
        cout << n << " ";
    }
    cout << endl;
    return 0;
}
Output
1 3 4 5 

Todo STL container — vector, map, set, e outros — suporta essa mesma sintaxe de range-based for, porque todos expõem o par de iterators begin()/end() no qual range-based for se apoia por baixo dos panos.

A seguir: lambdas e algorithms — functions anônimas combinadas com a própria biblioteca algorithm do STL.

Practice exercise

Crie um map<string, int> chamado ages. Insira "Alice" -> 30 e "Bob" -> 25. Imprima ages["Alice"].