Maison >développement back-end >C++ >Comment puis-je spécialiser `std::hash::operator()` pour les types personnalisés dans les conteneurs C non ordonnés ?

Comment puis-je spécialiser `std::hash::operator()` pour les types personnalisés dans les conteneurs C non ordonnés ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-05 15:33:14339parcourir

How Can I Specialize `std::hash::operator()` for Custom Types in C   Unordered Containers?

Spécialisation std::hash::operator() pour les types définis par l'utilisateur dans des conteneurs non ordonnés

Pour prendre en charge les types de clés définis par l'utilisateur dans std:: unordered_set et std::unordered_map, vous devez fournir l'opérateur==(Key, Key) et un foncteur de hachage.

Bien qu'il soit plus pratique d'écrire simplement std::unordered_set::operator() pour y parvenir.

Selon le projet de norme C N3242 §20.8.12 [unord.hash] et §17.6.3.4 [hash.requirements], et après avoir consulté diverses ressources, spécialisées std::hash::operator() de la manière suivante est la méthode correcte et unique :

namespace std {
  template <> struct hash<Foo>
  {
    size_t operator()(const Foo &amp; x) const
    {
      /* your code here, e.g. "return hash<int>()(x.value);" */
    }
  };
}

Cela vous permet d'ajouter des spécialisations à l'espace de noms std et constitue la méthode recommandée pour étendre les fonctionnalités. de types standard pour les types définis par l'utilisateur.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn