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;
}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;
}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"].