Heim >Backend-Entwicklung >C++ >Kann ich Paare als Schlüssel in ungeordneten C-Karten verwenden und wie?

Kann ich Paare als Schlüssel in ungeordneten C-Karten verwenden und wie?

Linda Hamilton
Linda HamiltonOriginal
2024-12-16 14:11:10132Durchsuche

Can I Use Pairs as Keys in C   Unordered Maps, and How?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn