2016-04-15 7 views
1

Also suchte ich mich um und stellte fest, dass wir Multi-Karte verwenden, können eine Reihe von gleichwertigen Tasten auf verschiedene Werte abzubilden. Ich frage mich, wie ich das Gegenteil machen soll? Das heißt, verschiedene Schlüssel auf denselben Wert zu legen? Gibt es dafür eine stl-Datenstruktur?Mapping verschiedene Schlüssel auf den gleichen Wert in C++

+0

Eine 'map' erfordert keine eindeutigen Werte. Nur Schlüssel. – cHao

+1

einfach die Karte umdrehen, so dass die Werte die Tasten und umgekehrt –

Antwort

0

können Sie haben eine std::map, so dass mehrere Tasten auf den gleichen Wert zuordnen. Da ist nichts dagegen. Was Sie jedoch wahrscheinlich suchen, ist die Fähigkeit, alle Schlüssel zu finden, die auf einen bestimmten Wert abgebildet werden, ohne über die gesamte Map zu iterieren. Ich denke nicht, dass es dafür eine solche Datenstruktur gibt.

+0

@Sahu Yea sind eigentlich ich eine Karte erstellt, die wie folgt aussieht: std :: map > , std :: string> m. Das Problem ist, dass, wenn ich einen Paar-Eintrag gebe, der zu dieser Map m existiert, nichts für den Wert ausgibt. Was könnte hier falsch sein? Ich dachte, vielleicht, weil es doppelte Werte gibt, und die Karte nur eins-zu-eins Korrespondenz erlaubt. Das ist der Grund, warum ich das gepostet habe. Jede Hilfe wäre dankbar. – slin6174

+0

@ dl23lin, in diesem Fall sollten Sie diese Frage löschen und eine andere Frage mit dem Code, den Sie versucht haben, fragen, was Sie erwarten zu sehen, was tatsächlich zu sehen ist. Das wird nützlicher sein als diese Frage. –

3

Ein normaler std::map (oder std::unordered_map) kann das tun. Sie haben ein paar Möglichkeiten, wie man das tun:

  • Normaler Schlüssel-Wert-Speicher, in dem Sie die Werte nach Bedarf
  • normaler Schlüssel-Wert-Speicher kopieren, aber wo der Wert ist ein Zeiger auf die eigentlichen Daten dass gemeinsam genutzt werden kann, gegebenenfalls ein std::shared_ptr
  • verwenden irgendeine Art von Struktur (a std::tuple vielleicht) mit den Tasten zu sammeln (obwohl es wahrscheinlich mehr Mühe Umgang mit dieser als es wert ist, nichts, was ich wirklich empfehlen)
  • verwenden Boost multi-index containers

mit Boost Sie haben eine fertige Lösung, die Sie gerade verwenden können, und wenn Sie bereits Erhöhung in Ihrem Projekt verwenden (es ist ein großer Satz von Bibliotheken, und ergänzt die Standard-Bibliothek gut) Ich denke, es ist ein Kinderspiel zu holen diese Lösung.

Verwandte Themen