Spezialisierung von std::hash
Um ungeordnete Container mit benutzerdefinierten zu nutzen Schlüsseltypen wie std::unordered_set
Bei der Untersuchung verschiedener Ressourcen, einschließlich des C-Standards, wird deutlich, dass dies möglich ist spezialisieren Sie std::hash
namespace std { template <> inline size_t hash<X>::operator()(const X& x) const { return hash<int>()(x.id); } }
Befassen wir uns nun mit den aufgeworfenen Fragen:
1. Rechtmäßigkeit der Spezialisierung
Das Hinzufügen von Spezialisierungen zum std-Namespace ist nicht nur erlaubt, sondern wird auch gefördert. Es ermöglicht die Erweiterung von Standardfunktionen zur Unterstützung benutzerdefinierter Typen.
2. Kompatible Version von std::hash
Die korrekte Syntax zum Spezialisieren von std::hash
namespace std { template <> struct hash<X> { size_t operator()(const X& x) const { // Your custom hash function implementation } }; }
3. Tragbare Lösung
Die zuvor gezeigte std::hash-Spezialisierung erfordert C 11-Kompatibilität, die von Compilern möglicherweise nicht allgemein unterstützt wird. Erwägen Sie für eine bessere Portabilität die Verwendung eines nicht standardmäßigen Namespace, z. B.:
namespace ht { template <> struct hash<X> { // Your custom hash function implementation }; }
Das obige ist der detaillierte Inhalt vonWie kann ich „std::hash::operator()' für benutzerdefinierte Typen in C spezialisieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!