Sobes.tech
Junior — Middle

Чӣ гуна муқоиса кардани объектҳо, ки ҳамчун калидҳо дар std::unordered_map истифода мешаванд?

sobes.tech AI

Ҷавоб аз AI

Дар объектҳои std::unordered_map, калидҳо бо ёрии функсияи баробарӣ (Equality) муқоиса мешаванд, ки ба таври пешфарз std::equal_to<Key> мебошад.

Ҳангоми илова кардан ё ҷустуҷӯи калид, раванд чунин аст:

  1. Ҳисоб кардани коди хеши калид бо ёрии функсияи хеш (аз пеш таъиншуда std::hash<Key>).
  2. Ҷустуҷӯ дар косаи мувофиқ (bucket) бо истифода аз муқоиса кардани калидҳо тавассути оператор == ё предикати баробарӣ таъиншуда.

Агар калидҳо намудҳои фармоишӣ бошанд, зарур аст:

  • Тасвир кардани махсусгардонии std::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;