Junior — Middle
Hogyan történik az objektumok összehasonlítása, amelyeket kulcsként használnak az std::unordered_map-ban?
sobes.tech MI
Válasz az MI-től
Az std::unordered_map objektumokban a kulcsokat az egyenlőség (Equality) függvény segítségével hasonlítják össze, amely alapértelmezés szerint a std::equal_to<Key>.
Új elem beszúrásakor vagy keresésekor a folyamat a következő:
- A kulcs hash-kódjának kiszámítása a hash-függvény (alapértelmezés szerint std::hash<Key>) segítségével.
- A megfelelő kosárban (bucket) történő keresés a kulcsok == operátorral vagy egy megadott egyenlőség predikáttal.
Ha a kulcsok egyedi típusok, akkor szükséges:
- Meghatározni a std::hash ezen típusra való specializációját vagy saját hash-függvényt biztosítani.
- Meghatározni az == operátort vagy saját összehasonlító függvényt biztosítani.
Példa:
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;