2016-08-04 6 views
5

Ich möchte eine Karte haben, die für Wert C++ 11 Einfachste Möglichkeit, mehrere Datentypen für value (int und string) in map <key, value> zu speichern?

wie diese

  • Zeichenfolge für Schlüssel
  • int OR Zeichenfolge verwendet:

    std::map<std::string, SOME TYPE> myMap; 
    myMap["first_key"] = 10; 
    myMap["second_key"] = "stringValue"; 
    

    Was ist der EINFACHSTEN Weg so etwas zu tun?

    hinzugefügt) Ich bin für Lösung, die in C++ gewohnt 11

+7

'std :: variant ' in C++ 17, können Sie Boost vorher betrachten. – Jarod42

+0

C++ ist stark typisiert. In fast allen Fällen, wenn Sie versuchen, verschiedene Typen in einem Container zu verwenden, machen Sie komplizierte Lese- und Schreibvorgänge im Container, die vereinfacht werden könnten, indem Sie in mehrere Container aufteilen und templatisierte Schreibmethoden verwenden. –

+0

@ Jarod42 Gibt es eine ähnliche Sache in C++ 11? –

Antwort

9

in C++ 17, können Sie std::variant<int, std::string>, vor diesem verwenden, können Sie die eine von boost verwenden:

using IntOrString = std::variant<int, std::string>; 
std::map<std::string, IntOrString> myMap; 
myMap["first_key"] = 10; 
myMap["second_key"] = "stringValue"; 
+0

Wow ..! können wir mehr als zwei typename innerhalb 'variant' haben? –

+0

Beliebige Nummern des Typs. – Jarod42

Verwandte Themen