Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

28.07.2007, 15:01

Multimap - Insert?

Hi

ich habe jezt schon ne halbe stunde lang gegooglet, komm aber nicht dahin wo ich hinwill. Also, wenn ich das richtig verstanden hab, kann in einer multimap ein key mehrere values haben. Jetzt hab ich eine ID über die ich mehrer Strings ansprechen will. Aber wie schreibe ich jezt diese ganzen strings darein? insert nimmt ja ein pair an, aber ein pair sind ja nur 2 werte, aber ich kann 5 oder mehr haben. Welche Funktion brauch ich da?

MfG
Eldarion

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

2

28.07.2007, 15:49

Was du willst ist glaub ich bisschen was anderes als das, was std::multimap bietet ;)
Versuch doch mal, eine std::map, in der der 1. Eintrag dein Index und der 2. Eintrag ein std::vector<std::string> ist. also:

C-/C++-Quelltext

1
2
3
4
std::map<int, std::vector<std::string>> indexlist;
indexlist.push(std::pair<int, std::vector<std::string>>(_index, 0)); // erstma nen std::vector mit 0 Elementen initialisieren

indexlist[_index].pushback("string1 zu _index"); // Strings einfügen

indexlist[_index].pushback("string2 zu _index");


Hab das jetzt nicht auf Fehler getestet, sollte aber ca. so gehen.

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

3

28.07.2007, 16:04

std::map bedeutet AFAIK 1 Key : 1 Eintrag.
std::multimap 1 Key : n Einträge.

insert setzt für den Fall, dass es sich um eine std::map handelt und der Key schon vorhanden ist das Attribut iterator.second auf NULL. Im Falle von einer std::multimap wird einfach das Element hinzugefügt.
Natürlich ist greeks Lösung auch eine Möglichkeit :!:
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

4

28.07.2007, 18:25

ok, danke.

@grek: ich war auch davon ausgegangen was nox hier geschrieben hat:

Zitat

std::map bedeutet AFAIK 1 Key : 1 Eintrag.
std::multimap 1 Key : n Einträge.

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

5

28.07.2007, 19:59

stimmt auch so fast...
bei Multimap kann man halt mehrere Einträge mit dem selben Schlüssel anlegen, nur trotzdem hat man jedes mal nur ein Wertepaar. Die Einträge wären dann ca. so (Beispiel:

int, std::string

0, "string1"
1, "string2"
1, "string3"
1, "string4"
3, "string5
...

eben immer ein Wertepaar - nur eben dass der selbe Index öfter vorkommen kann. Ich war halt davon ausgegangen, dass es für dich mehr sinn macht, die von mir vorgestellte Variante zu nehmen, kann aber nat. auch sein, dass std::multimap echt auf dein Problem passt.

6

28.07.2007, 21:33

in meinem fall geht es nur darum strings an eine ID zuzuordnen, also tuts auch eine multimap :)

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

7

29.07.2007, 10:38

Hier gibts ein Beispiel: http://www.sgi.com/tech/stl/Multimap.html
@D13_Dreinig

8

29.07.2007, 11:39

danke, jetzt hab ich auch verstanden warum man auf das nächset element des gleichen keys mit einfechem inkrementieren das iterators zugreifen kann :)

Werbeanzeige