Ungeordneter Kartenkompilierungsfehler mit Paarschlüsseln
Beim Versuch, eine ungeordnete Karte zu erstellen, bei der die Schlüssel Paare sind, kann der folgende Fehler auftreten :
Implicit instantiation of undefined template 'std::__1::hash, std::__1::basic_string >>'
Dieser Fehler tritt auf, weil ungeordnete Karten die Definition von Hash-Funktionen für ihre Schlüsseltypen erfordern. Während der Hash
Lösung: Bereitstellung einer benutzerdefinierten Hash-Funktion
Um dieses Problem zu beheben, müssen Sie Sie müssen eine benutzerdefinierte Hash-Funktion für Ihren Paarschlüsseltyp definieren. Hier ist eine Beispielimplementierung:
struct pair_hash { template<class T1, class T2> size_t operator()(const pair<T1, T2>& p) const { auto h1 = hash<T1>()(p.first); auto h2 = hash<T2>()(p.second); return h1 ^ h2; } };
Diese Hash-Funktion kombiniert die Hash-Werte der einzelnen Komponenten des Paares mit bitweisem XOR (^).
Verwendung der benutzerdefinierten Hash-Funktion
Sobald Sie die Hash-Funktion definiert haben, können Sie damit eine ungeordnete Karte mit Paarschlüsseln erstellen folgt:
using Vote = pair<string, string>; using Unordered_map = unordered_map<Vote, int, pair_hash>; Unordered_map um;
Mit dieser Änderung tritt der Kompilierungsfehler nicht mehr auf und Sie können die ungeordnete Karte wie erwartet verwenden.
Das obige ist der detaillierte Inhalt vonWie behebe ich Fehler bei der ungeordneten Kartenkompilierung mit Paarschlüsseln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!