Ce face std::flat_map
std::flat_map are aproape aceeași interfață ca std::map (operator[], at, find, contains, insert, erase), dar nu folosește un arbore. Cheile stau sortate într-un vector, iar valorile în alt vector, pe aceleași poziții. Le poți vedea direct cu keys() și values().
Căutarea este o căutare binară într-un vector, deci rapidă și prietenoasă cu memoria cache; parcurgerea este la fel de rapidă ca la un vector. În schimb, inserarea sau ștergerea la mijloc mută elementele de după, ca la std::vector, și invalidează iteratorii. Este potrivit pentru date construite o dată și citite des (configurări, tabele de traduceri).
Parametri
| Parametru | Descriere |
|---|---|
Cheie, Valoare |
Ca la std::map. |
Ce returnează
Un obiect flat_map.
Exemple
Exemplul 1: Traduceri citite des
#include <flat_map>
#include <print>
#include <string>
int main() {
std::flat_map<std::string, std::string> traduceri{
{"hello", "salut"}, {"bread", "pâine"}, {"apple", "măr"},
};
traduceri["water"] = "apă";
std::println("{}", traduceri);
std::println("chei: {}", traduceri.keys());
std::println("valori: {}", traduceri.values());
if (auto it = traduceri.find("bread"); it != traduceri.end()) {
std::println("bread = {}", it->second);
}
}
Rezultat
{"apple": "măr", "bread": "pâine", "hello": "salut", "water": "apă"}
chei: ["apple", "bread", "hello", "water"]
valori: ["măr", "pâine", "salut", "apă"]
bread = pâine
Greșeli frecvente
- Folosești
std::flat_mappentru date în care inserezi și ștergi des, în ordine aleatorie. Fiecare inserare mută elemente; acolostd::mapsaustd::unordered_mapsunt mai potrivite. - Păstrezi iteratori sau referințe după o inserare. Ca la vector, ele pot deveni invalide.
Comenzi înrudite
std::map: Dicționar ordonat: asociază fiecărei chei unice o valoare și păstrează cheile sortate.std::vector: Tabloul dinamic din C++: ține elementele unul după altul în memorie și își mărește singur dimensiunea.std::unordered_map: Dicționar bazat pe tabelă hash: căutare în timp mediu constant, dar fără o ordine anume a elementelor.