Junior — Middle
138
Cum se realizează compararea obiectelor utilizate ca chei în std::unordered_map?
Companiile au fost întrebate
Телкор
Răspuns de la AI
sobes.tech AI
În obiectele std::unordered_map, cheile sunt comparate folosind funcția de egalitate (Equality), care implicit este std::equal_to<Key>.
La inserare sau căutare a unei chei, se procedează astfel:
- Se calculează codul hash al cheii folosind funcția de hash (implicit std::hash<Key>).
- Se caută în coșul (bucket) corespunzător, comparând cheile cu operatorul == sau cu un predicat de egalitate definit.
Dacă cheile sunt tipuri personalizate, este necesar:
- Să se definească o specializare a std::hash pentru acest tip sau să se furnizeze propria funcție de hash.
- Să se definească operatorul == sau să se furnizeze propria funcție de comparare a egalității.
Exemplu:
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;