Maison > développement back-end > C++ > Comment puis-je fournir une fonction de hachage par défaut pour les types personnalisés dans les conteneurs C non ordonnés ?

Comment puis-je fournir une fonction de hachage par défaut pour les types personnalisés dans les conteneurs C non ordonnés ?

Linda Hamilton
Libérer: 2024-11-30 20:04:13
original
883 Les gens l'ont consulté

How Can I Provide a Default Hash Function for Custom Types in C   Unordered Containers?

Spécialisation std::hash pour les types personnalisés dans des conteneurs non ordonnés

Dans des conteneurs non ordonnés comme std::unordered_set et std::unordered_map, prenant en charge Les types de clés personnalisés nécessitent de fournir à la fois Operator== et un foncteur de hachage. Bien qu'il soit pratique d'utiliser un foncteur de hachage personnalisé, il est également souhaitable d'avoir un hachage par défaut pour les types personnalisés similaires aux types intégrés.

Pour y parvenir, on peut spécialiser std::hash pour le type personnalisé Clé. Cependant, cela soulève des questions sur sa légalité, sa conformité et sa portabilité.

Légalité

La spécification d'une spécialisation dans l'espace de noms std est autorisée et, en fait, encouragée dans les cas comme ça.

Conformité

La bonne façon de se spécialiser std::hash consiste à définir une structure personnalisée dans l'espace de noms std. L'extrait de code suivant montre la syntaxe correcte :

namespace std {
  template <> struct hash<Foo> {
    size_t operator()(const Foo &x) const {
      // Hashing logic for custom type
    }
  };
}
Copier après la connexion

Portabilité

Cette méthode de spécialisation std::hash est portable sur les principaux compilateurs tels que g et MSVC.

Fonctionnalités supplémentaires

En dehors de std::hash, on peut également spécialiser d'autres foncteurs comme std::less, std::equal_to et std::swap pour des types personnalisés afin d'améliorer les fonctionnalités.

Conclusion

En spécialisant std::hash, on peut fournir une fonction de hachage par défaut pour les types personnalisés dans des conteneurs non ordonnés, ce qui rend plus pratique leur utilisation dans la bibliothèque standard conteneurs. Cette approche est à la fois légale et transférable tout en adhérant aux normes C 11.

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