Paare als Schlüssel in ungeordneten Karten verstehen
Beim Versuch, eine ungeordnete Karte mit einem Paar als Schlüssel zu erstellen, kann es zu einer Kompilierung kommen Fehler. Dieser Fehler entsteht durch das Fehlen einer geeigneten Hash-Funktion für den benutzerdefinierten Schlüsseltyp Paar.
Um dieses Problem zu beheben, verlangt std::unordered_map von Benutzern, eine Hash-Funktion bereitzustellen, die speziell für den Schlüsseltyp entwickelt wurde. Diese Funktion ist für die Zuordnung des Schlüssels zu einer eindeutigen Kennung verantwortlich, was für einen schnellen und effizienten Abruf von entscheidender Bedeutung ist.
Implementierung einer benutzerdefinierten Hash-Funktion
Eine einfache, wenn auch nicht Optimalerweise kann die Hash-Funktion für ein Paar std::hash-fähiger Typen implementiert werden als folgt:
struct pair_hash { template <class T1, class T2> std::size_t operator()(const std::pair<T1, T2>& p) const { auto h1 = std::hash<T1>()(p.first); auto h2 = std::hash<T2>()(p.second); return h1 ^ h2; // Combine the hashes using a simple XOR } };
Verwenden der benutzerdefinierten Hash-Funktion
Sobald die Hash-Funktion definiert ist, kann sie mit std::unordered_map verwendet werden, um den Kompilierungsfehler zu beheben:
#include <unordered_map> #include <functional> #include <string> #include <utility> using Vote = std::pair<std::string, std::string>; using Unordered_map = std::unordered_map<Vote, int, pair_hash>; int main() { Unordered_map um; }
Alternative Lösungen
Für Für eine umfassendere Unterstützung und bessere Leistung sollten Sie die Verwendung von Bibliotheken wie Boost in Betracht ziehen. Boost bietet:
Durch die Nutzung dieser Optionen können Benutzer zuverlässiges Hashing für ihre benutzerdefinierten Schlüsseltypen in std::unordered_map sicherstellen. Ermöglicht eine effiziente und optimale Codeleistung.
Das obige ist der detaillierte Inhalt vonWie verwende ich Paare als Schlüssel in ungeordneten Karten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!