"We are back" « oc.at

C++ STL Liste Elemente löschen

alexsb 03.04.2004 - 19:29 1077 7
Posts

alexsb

hmm
Avatar
Registered: Jun 2001
Location: near Graz
Posts: 1566
Hi,
ich möchte, während ich über eine STL Liste iteriere Elemente der selben Liste löschen. Ist das möglich, oder bringe ich da den Iterator durcheinander?

thx,

Alex

mat

Administrator
Legends never die
Avatar
Registered: Aug 2003
Location: nö
Posts: 25642
ja.. du löscht ja mit dem iterator und der wird dann ungültig.

alexsb

hmm
Avatar
Registered: Jun 2001
Location: near Graz
Posts: 1566
Ok danke, wie kann ich dann, möglichst effizient eine Liste die 4000 Pairs mit je zwei double Werten beinhaltet von Duplikaten bereinigen?
Ich hätte gedacht, ich sortiere das ganze zuerst, und dann lösche ich die doppelten, aber ich weiss weder wie ich das lösche noch wie ich das sortiere, sort kann ich ja soweit ich weiß nicht auf die Pairs anwenden.
Eventuell ist die Datenstruktur auch nicht optimal, gibts da bessere Vorschläge?

mat

Administrator
Legends never die
Avatar
Registered: Aug 2003
Location: nö
Posts: 25642
.remove(value)

noch besser wäre unique()

alexsb

hmm
Avatar
Registered: Jun 2001
Location: near Graz
Posts: 1566
hmm, funktioniert das auch mit nicht primitiven listenelementen, wie in meinem fall?

edit: ja, es funktioniert *freu*

Noch eine Frage, wie kann ich das jetzt abhängig vom ersten oder vom zweiten Wert des Pairs sortieren? Geht das?

tia
Bearbeitet von alexsb am 03.04.2004, 20:20

mat

Administrator
Legends never die
Avatar
Registered: Aug 2003
Location: nö
Posts: 25642
nimm einen der sortalgorithmen und schreib dir eine passende compare funktion. findest alles in etlichen stl references (zB http://www.sgi.com)

edit:
http://www.sgi.com/tech/stl/sort.html
Zitat
template <class RandomAccessIterator>
void sort(RandomAccessIterator first, RandomAccessIterator last);

template <class RandomAccessIterator, class StrictWeakOrdering>
void sort(RandomAccessIterator first, RandomAccessIterator last,
StrictWeakOrdering comp);

The two versions of sort differ in how they define whether one element is less than another. The first version compares objects using operator<, and the second compares objects using a function object comp

Ringding

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
Man kann sehr wohl aus der Liste loeschen, waehrend man darueber iteriert. Der einzige Iterator, der beim Loeschen ungueltig wird, ist der auf das geloeschte Element zeigende, man kann also sowas machen:

Code:
iteratortype it2 = it;
++it;
l.erase(it2);
Und dann ganz normal mit it weitermachen.

alexsb

hmm
Avatar
Registered: Jun 2001
Location: near Graz
Posts: 1566
naja, hätte geholfen, aber ich hab mir inzwischen eine andere Datenstuktur zugelegt, die wesentlich performanter ist. Ist jetzt eine Map, in der nur die Einzigartigen überhaupt eingetragen werden. Danke auf jeden Fall.
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz