Kann ich Paare als Schlüssel in ungeordneten Karten verwenden?
In C kann es zu einem Kompilierungsfehler kommen, wenn Sie eine ungeordnete_Karte mit Paar als verwenden sein Schlüssel. Das Problem entsteht durch die Verwendung eines benutzerdefinierten Typs als Schlüssel, ohne eine entsprechende Hash-Funktion dafür bereitzustellen.
Verstehen des Fehlers
Der Fehler, auf den Sie stoßen, liegt daran, dass unordered_map darauf angewiesen ist auf einem Hashing-Mechanismus zur effizienten Lokalisierung von Schlüssel-Wert-Paaren. Es fehlt jedoch eine Standard-Hash-Funktion für komplexe Typen wie Paare. Die Fehlermeldung weist darauf hin, dass der Compiler keine undefinierte Hash-Funktion für Ihren Paarschlüsseltyp implizit instanziieren kann.
Lösung: Bereitstellung einer Hash-Funktion
Um dieses Problem zu beheben, müssen Sie Sie müssen eine Hash-Funktion definieren, die einen eindeutigen Hash-Wert für Ihren Abstimmungspaartyp berechnet. Diese Funktion sollte ein Paar als Argument akzeptieren und einen Hash-Wert ausgeben.
Hier ist ein Beispiel für die Implementierung einer Hash-Funktion:
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; } };
Mit dieser Hash-Funktion können Sie Ihren Code ändern, um einen zu erstellen unordered_map, die Paare als Schlüssel verwendet:
using Vote = std::pair<std::string, std::string>; using Unordered_map = std::unordered_map<Vote, int, pair_hash>;
Jetzt können Sie diese unordered_map wie vorgesehen verwenden und so die Kompilierung vermeiden Fehler.
Das obige ist der detaillierte Inhalt vonKann ich Paare als Schlüssel in ungeordneten C-Karten verwenden und wie?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!