Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Verwaltungsproblem mit Menge

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
12.03.2004, 10:18 Uhr
~Rock
Gast


Hi,

ich erhalte in sehr kleinen Zeitabständens ständig folgende Informationen:

z.B.
ID: 200
Name: Karl
Position: 20,40,30

Jede ID gibt es nur einmal. Es ist aber durchaus möglich, dass der Name oder die Position sich ändert.
Deshalb dachte ich, dass es praktisch wäre eine Menge zu nehmen, damit automatisch gewährleistet ist, dass beim Einfügen jede ID nur einmal vorkommt.

Mein eigener Ansatz war jetzt erst einmal, dass ich eine Menge der STL (set) genommen habe. Dort hatte ich nur die IDs abgespeichert. Das hat geklappt, das Problem war dann aber, da die Menge ungeordnet ist, dass ich nicht mehr zu den passenden Informationen Name und Position rangekommen bin.

Naja, wenn ich jetzt eine Menge vom Typ der Struktur Memberinfo(ID,Name,Position) nehme, dann ist das Problem wahrscheinlich, dass wenn sich Name oder Position ändert, dies dann als neuen Eintrag sehen würde.

Hier mal noch ein paar Beispiele zur Verdeutlichung des Problems:

am Anfang: leerer Vektor bzw. Menge

Information 1 kommt an:
ID:200
Name: Karl
Position: 20,30,40

und wird abgespeichert.

Information 2 kommt an:

ID: 320
Name: Fritz
Position: 30,40,50

und wird abgespeichert.

Information 3 kommt an:

ID: 320
Name: Fritz
Position: 30,30,30

und überschreibt Position von Information 2, da ID 320 bereits enthalten.

Der Vektor bzw. die Menge sollte jetzt folgende Einträge enthalten:

ID:200
Name: Karl
Position: 20,30,40

ID: 320
Name: Fritz
Position: 30,30,30

Die Sache ist so, dass es genau so viele Einträge gibt, wie es unterschiedliche IDs gibt. Und immer die letzte aktuelle Information zur jeweiligen ID soll abgespeichert sein.

Wie kann ich das machen?

Vielen Dank schon mal im Voraus für eure Vorschläge

Rock
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
12.03.2004, 11:05 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


naja wenn du es mit dem vector machen willst brauchst du doch nur vor dem einfügen den vector einmal komplett mit ner schleife durchzugehen und guckst nach obs die ID schon gibt. wenn ja dann an der stelle überschreiben. wenn nein am ende ein push_back machen....
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
12.03.2004, 12:05 Uhr
~Rock
Gast


Danke. Stimmt schon, so würde es gehen. Allerdings dachte ich, dass es nicht so effizient wäre, wenn man bei jedem Einfügen den gesamten Vektor überprüft. Aber eine Menge macht das ja wahrscheinlich auch. Da kriegt man es halt nicht mit.

Ich werde es deshalb so machen, wie du es vorgeschlagen hast.

mfg

Rock
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
12.03.2004, 12:09 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


falls du es effinzienter machen willst kannst du ja sortierend einfügen
das ist ja relativ problemlos möglich, dann musst du beim check im schnitt auch nur den halben vector durchlaufen...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
12.03.2004, 12:43 Uhr
~(un)wissender
Gast


Mit quadratischem Sondieren nur log2(vector.size()), kannst auch aus der stl equal_range nehmen, ist halt schon fertig.
Vorrausetzung ist ein sortierter Vector.
Wenn du allerdings oft einfügst und das nicht am Ende, dann würde ich einen anderen Container nehmen, linked list z.B.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: