Junior — Middle
Ako sa vykonáva porovnanie objektov používaných ako kľúče v std::unordered_map?
sobes.tech AI
Odpoveď od AI
V objektoch std::unordered_map sa porovnávajú kľúče pomocou funkcie rovnosti (Equality), ktorá je predvolená ako std::equal_to<Key>.
Pri vkladaní alebo hľadaní kľúča sa vykonáva:
- Výpočet hash kódu kľúča pomocou hash funkcie (predvolene std::hash<Key>).
- Vyhľadávanie v príslušnej vedre (bucket) pomocou porovnania kľúčov cez operátor == alebo definovaný predikát rovnosti.
Ak sú kľúče vlastné typy, je potrebné:
- Definovať špecializáciu std::hash pre tento typ alebo poskytnúť vlastnú hash funkciu.
- Definovať operátor == alebo poskytnúť vlastnú funkciu porovnania rovnosti.
Príklad:
struct Key {
int id;
bool operator==(const Key& other) const {
return id == other.id;
}
};
namespace std {
template<>
struct hash<Key> {
size_t operator()(const Key& k) const {
return std::hash<int>()(k.id);
}
};
}
std::unordered_map<Key, std::string> map;