Avere una mappa con chiavi costituite da diversi tipi in C ++

Attualmente sto usando una mappa in C ++ e ho un paio di valori che sono inte e booleani, anche se la maggior parte di essi sono stringhe. So che in Java potrei fare qualcosa del genere:

std::map mapvar; 

ma esiste un equivalente Object in C ++ ?? In caso contrario, esiste un modo in cui potrei avere i valori correttamente come std::string , int o bool ?

Non so come si possa avere una std::map con chiavi che possono essere di più tipi usando lo stdlib out of the box.

Boost ha un tipo di variant che funziona più o meno come quello che vuoi.

 typedef boost::variant key_type; std::map mapvar 

Questa mappa accetta solo le chiavi definite nel tuo key_type scelto , quindi non puoi usare, ad esempio, un std::wstring come chiave senza dichiararlo esplicitamente. Questo sarebbe il vantaggio di usare una variant su any . Quest’ultimo potrebbe felicemente mangiare qualunque tipo tu invii, mentre il primo ti darà un errore di compilazione.

Se si intende utilizzare boost::variant come chiave, è necessario leggere la documentazione di boost e esaminare le implicazioni nella costruzione di oggetti variant e indipendentemente dal fatto che abbiano o meno un ordinamento predefinito. std::map è costruito sull’operatore operator< (a meno che tu non lo modelli su qualche altro functor di ordinamento) quindi dovrai assicurarti che una definizione di lavoro per il tuo tipo di variant sia fornita dalla libreria o da te.

-

Perché vuoi avere una mappa del genere in primo luogo?

Puoi avere diverse mappe diverse e hide la ricerca nelle funzioni sovraccariche:

 std::map map_int; std::map map_string; Object& lookup(int Key) { return map_int[Key]; } Object& lookup(std::string Key) { return map_string[Key]; } 

Ora tutte le tue ricerche possono essere fatte con lookup(key) .

“ma esiste un equivalente Object in C ++ ??”

No, non esiste una cosa del genere in C ++ standard. c ++ – cli può fornire qualcosa di simile forse.

“In caso contrario, c’è un modo in cui potrei avere le chiavi correttamente come stringa, int o booleano?”

Ci sono cose come boost::variant o boost::any , ma non sono sicuro, se potessi usarle come chiave in una std::map .

Sembra un po ‘che stai chiedendo un XY-Problem. Spiega il tuo caso d’uso reale per favore.