Tupel in unordered_map verwenden

7

Ich möchte ein Tupel verwenden, das aus int , char , char in meinem unordered_map besteht. Ich mache das so:

%Vor%

aber das gibt mir folgende Fehler:

%Vor%

Was mache ich falsch damit?

    
Xara 30.12.2013, 07:00
quelle

4 Antworten

10

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:

%Vor%

Und schließlich, da Benjamin Lindley bereits Adressen beantwortet, müssen Sie std::make_tuple :

verwenden %Vor%

Der Code wurde aus mit einem std :: tuple als Schlüssel abgerufen für std :: unordered_map und hier ist das Live-Beispiel .

    
user1508519 30.12.2013, 07:16
quelle
8

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?

%Vor%

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" ).

%Vor%     
Benjamin Lindley 30.12.2013 07:06
quelle
4

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%     
Leo Goodstadt 29.01.2014 18:12
quelle
1

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

    
Manohar Reddy Poreddy 06.09.2016 09:20
quelle