Junior — Middle
136
Kaip atliekamas objektų, naudojamų kaip raktai std::unordered_map, palyginimas?
Įmonės kur klausė
Телкор
Atsakymas iš AI
sobes.tech AI
Objektuose std::unordered_map raktai lyginami naudojant lygybės funkciją (Equality), kuri pagal numatytuosius nustatymus yra std::equal_to<Key>.
Pridedant ar ieškant rakto, vyksta:
- Raktas yra apskaičiuojamas naudojant hash funkciją (numatyta std::hash<Key>).
- Ieškoma atitinkamoje kibire (bucket), lyginant raktus naudojant == operatorių arba nustatytą lygybės predikatą.
Jei raktai yra naudotojo apibrėžti tipai, būtina:
- Apibrėžti std::hash specializaciją šiam tipui arba pateikti savo hash funkciją.
- Apibrėžti == operatorių arba pateikti savo lygybės funkciją.
Pavyzdys:
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;