Die Vorlagenargumente für eine ungeordnete Vorlage sehen folgendermaßen aus:
%Vor% std::hash
ist nicht auf Tupel spezialisiert (scrollen Sie nach unten zu Standardspezialisierungen für Bibliothekstypen). Daher müssen Sie Ihre eigenen Daten bereitstellen, etwa so:
Und schließlich, da Benjamin Lindley bereits Adressen beantwortet, müssen Sie std::make_tuple
:
Der Code wurde aus mit einem std :: tuple als Schlüssel abgerufen für std :: unordered_map und hier ist das Live-Beispiel .
Erster Fehler:
%Vor% Wie der Fehler eindeutig sagt, muss der Template-Parameter ein Typ sein. kk
ist kein Typ, es ist ein Objekt. Vielleicht wollten Sie es zu einem Typdef machen?
Zweiter Fehler:
%Vor% Zwei Probleme hier. Erstens macht das Einfügen von Kommas zwischen Werten kein Tupel daraus. Sie müssen dies explizit angeben, indem Sie entweder den Konstruktor Ihres Tupel-Typs aufrufen oder eine Funktion verwenden, die ein Tupel zurückgibt (z. B. std::make_tuple
). Zweitens erwartet Ihr Tupel Zeichen ( 'c','b'
), keine Zeichenfolgen ( "c","b"
).
Wie bereits erwähnt, ist std :: hash nicht auf Tupel spezialisiert. Wenn Ihr Tupel jedoch aus standardmäßigen hashbaren Typen wie string und int besteht, wird der folgende Code aus generic-hash-für-tupel-in-ungeordnete-map-ungeordnete-set fügt automatisch solche Unterstützung in c ++ 11 hinzu.
Fügen Sie den Code einfach in eine Headerdatei ein und fügen Sie ihn bei Bedarf hinzu:
%Vor% Ich hatte eine Map-Anforderung anstelle einer ungeordneten Map:
Schlüssel war 3-Tupel und
Wert war ein 4-Tupel
Ich sah alle Antworten und wollte mich zu Paaren umwandeln
aber, unten funktioniert für mich:
%Vor%Ich benutze Visual Studio Community 2015 IDE
Tags und Links c++ hashmap stdtuple unordered-map