Junior — Middle
Kā tiek veikta objektu salīdzināšana, kas tiek izmantoti kā atslēgas std::unordered_map?
sobes.tech AI
Atbilde no AI
Objektos std::unordered_map, atslēgas tiek salīdzinātas ar vienādības funkciju (Equality), kas pēc noklusējuma ir std::equal_to<Key>.
Pievienojot vai meklējot atslēgu, notiek šādi:
- Atslēgas hash koda aprēķins, izmantojot hash funkciju (noklusējuma std::hash<Key>).
- Meklēšana atbilstošajā grozā (bucket), salīdzinot atslēgas ar operatoru == vai noteikto vienādības predikātu.
Ja atslēgas ir pielāgoti tipi, ir nepieciešams:
- Definēt std::hash specializāciju šim tipam vai nodrošināt savu hash funkciju.
- Definēt operatoru == vai nodrošināt savu vienādības funkciju.
Piemērs:
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;