Junior — Middle
Kuidas toimub std::unordered_map'is kasutatavate võtmete objektide võrdlus?
sobes.tech AI
Vastus AI-lt
Objektides std::unordered_map võrreldakse võtmeid võrdlusfunktsiooniga (Equality), mis vaikimisi on std::equal_to<Key>.
Võtme lisamisel või otsimisel toimub:
- Võtme hash-koodi arvutamine hash-funktsiooni abil (vaikimisi std::hash<Key>).
- Otsing vastavas ämbris (bucket), võrreldes võtmeid == operaatoriga või määratud võrdluspredikaadiga.
Kui võtmed on kasutaja määratud tüübid, on vajalik:
- Spetsialiseerida std::hash selle tüübi jaoks või pakkuda oma hash-funktsiooni.
- Määrata == operaator või pakkuda oma võrdlusfunktsioon.
Näide:
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;