std::map - unbenutzten Key ermitteln
-
Hallo Forum,
angenommen ich habe eine
std::map<unsigned int, float>.
Gibt es eine praktikable, leichte möglichkeit einen neuen Wert einzufügen, ohne selbst einen Schlüssel festzulegen?
Also kannstd::map<>irgendwie nach unbenutzten Schlüsseln suchen?
-
Wo ist der Sinn hinter der Aktion? Beschreibe mal, was genau Du mache willst.
PS: Ich frage, weil mir das nicht sinnvoll erscheint. Der Key wird ja zur Suche des Wertes benutzt. Wenn Du zufällige Keys hast, kannst Du nicht mehr ordentlich danach suchen.
-
Nein, nicht wirklich.
std::mapbasiert ja darauf, dass jeweils Schlüssel-Wert-Paare vorliegen.Wozu brauchst du das? Wäre nicht
std::seteine bessere Alternative?
-
Ich möchte eine Klasse in eine "Liste" verpacken.
Die Schlüssel sollen in gewisser weiße IDs für die Klassen darstellen.
-
daersc schrieb:
Ich möchte eine Klasse in eine "Liste" verpacken.
Die Schlüssel sollen in gewisser weiße IDs für die Klassen darstellen.Das ist (für mich, aber ich bin auch doof) noch etwas zu wenig Info. Was genau willst Du machen? Klassen kann man nicht in einer Liste packen. Instanzen der Klasse schon.
Willst Du vielleicht eine Factory bauen?
-
Ich weiß zwar nicht was eien Factory ist aber ja ich möchte Instanzen einer Klasse in einer Liste darstellen.
Später sollen andere Klassen auf eine Instanz meiner Liste/Map wie auf eine Hashtable zugreifen können - und sie haben dann nur die IDs gegeben.
-
Eine Factory ist eine Klasse oder Funktion, die Instanzen erzeugt. Das Factory-Pattern wird oft benötigt, wenn man nicht selber über den Konstruktor Objekte erstellen darf, sondern über eine genau vorgegebene Schnittstelle.
Inwiefern ist das ein Problem für dich, dass der Schlüssel bekannt sein muss? Hast du am Anfang noch nicht alle Schlüssel, sondern nur die Werte? Kein Problem, dann speicherst du die Werte eben in einem anderen Container (z.B.
std::list) und fügst diese nacheinander in die Map ein - inklusive Schlüssel.Für Hashmaps gibt es auch
std::tr1::unordered_map, falls du TR1-Unterstützung hast.
-
Erstmal: Danke für eure Antworten!
Jetzt habe ich noch eine weitere Frage:
Nexus schrieb:
Für Hashmaps gibt es auch
std::tr1::unordered_map, falls du TR1-Unterstützung hast.Kann ich bei einer
std::mapin jedem Fall davon ausgehen, dass die Schlüssel sortiert sind? Weil das ist doch nicht vorgeschrieben vom Standard oder?
Ist es dann schlachter Programmierstil wenn man das einfach als gegeben ansieht?
-
daersc schrieb:
Kann ich bei einer
std::mapin jedem Fall davon ausgehen, dass die Schlüssel sortiert sind? Weil das ist doch nicht vorgeschrieben vom Standard oder?Doch, das ist vorgeschrieben. Du kannst auch selber ein Sortierkriterium angeben, standardmässig wird dafür
operator<genommen.daersc schrieb:
Ist es dann schlachter Programmierstil wenn man das einfach als gegeben ansieht?
Nein, im Gegenteil. Das ist gerade eine wichtige Eigenschaft der assoziativen Container.