Junior — Middle
Πώς πραγματοποιείται η σύγκριση αντικειμένων που χρησιμοποιούνται ως κλειδιά στο std::unordered_map;
sobes.tech AI
Απάντηση από AI
Στα αντικείμενα std::unordered_map, τα κλειδιά συγκρίνονται με τη βοήθεια της συνάρτησης ισότητας (Equality), η οποία από προεπιλογή είναι η std::equal_to<Key>.
Κατά την εισαγωγή ή την αναζήτηση ενός κλειδιού, γίνεται:
- Υπολογισμός του κωδικού κατακερματισμού (hash code) του κλειδιού με τη χρήση της συνάρτησης hash (από προεπιλογή std::hash<Key>).
- Αναζήτηση στο αντίστοιχο κουβά (bucket) με σύγκριση των κλειδιών μέσω του τελεστή == ή ενός ορισμένου προγράμματος σύγκρισης.
Εάν τα κλειδιά είναι προσαρμοσμένοι τύποι, είναι απαραίτητο:
- Να ορίσετε μια εξειδίκευση του std::hash για αυτόν τον τύπο ή να παρέχετε μια δική σας συνάρτηση hash.
- Να ορίσετε τον τελεστή == ή να παρέχετε μια δική σας συνάρτηση σύγκρισης.
Παράδειγμα:
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;