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
Libérer: 2024-12-05 15:33:14
original
366 Les gens l'ont consulté

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);" */
    }
  };
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal