Spécialiser std::hash
Pour exploiter les conteneurs non ordonnés avec des types définis par l'utilisateur types de clés, tels que std::unordered_set
En étudiant diverses ressources, y compris le standard C, il devient évident qu'il est possible de spécialisez std::hash
namespace std { template <> inline size_t hash<X>::operator()(const X& x) const { return hash<int>()(x.id); } }
Maintenant, abordons les questions soulevées :
1. Légalité de la spécialisation
L'ajout de spécialisations à l'espace de noms std est non seulement autorisé mais encouragé. Il permet l'extension des capacités standard pour prendre en charge les types définis par l'utilisateur.
2. Version conforme de std::hash
La syntaxe correcte pour spécialiser std::hash
namespace std { template <> struct hash<X> { size_t operator()(const X& x) const { // Your custom hash function implementation } }; }
3. Solution portable
La spécialisation std::hash démontrée précédemment nécessite une compatibilité C 11, qui peut ne pas être universellement prise en charge par les compilateurs. Pour une portabilité accrue, envisagez d'utiliser un espace de noms non standard, par exemple :
namespace ht { template <> struct hash<X> { // Your custom hash function implementation }; }
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!