PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Ermitteln der Keys einer Multimap in C++



Christoph
01-06-2006, 17:30
Hallo,

weiss jemand, wie man nur über die Keys in eine STL multimap iterieren kann?

Der Iterator lieferet immer alle (Key, Value) Paare zurück. Ich bin mir allerdings nicht sicher, ob die geordnet sind, so dass gleiche Keys immer aufeinanderfolgen; dann könnte man Gruppenwechsel bei wechselnden Keys machen (was zwar nicht elegant, aber eine Lösung meines Problems wäre).

locus vivendi
01-06-2006, 19:22
weiss jemand, wie man nur über die Keys in eine STL multimap iterieren kann?
Der Iterator lieferet immer alle (Key, Value) Paare zurück. Ich bin mir allerdings nicht sicher, ob die geordnet sind, so dass gleiche Keys immer aufeinanderfolgen;
Ich weiß zwar nicht was letzteres mit der Frage zu tun hat, aber gleich Keys folgen jedenfalls aufeinander.
Der Standard sagt insbesondere über multimap dieses:
"
The fundamental property of iterators of associative containers is that they iterate through the containers in
the non-descending order of keys where non-descending is defined by the comparison that was used to con-
struct them. For any two dereferenceable iterators i and j such that distance from i to j is positive,
value_comp(*j, *i) == false
For associative containers with unique keys the stronger condition holds,
value_comp(*i, *j) != false.
"

Christoph
02-06-2006, 07:40
Ich weiß zwar nicht was letzteres mit der Frage zu tun hat, aber gleich Keys folgen jedenfalls aufeinander.

Danke für die Info, die ich im Stroustrup irgendwie nicht gefunden habe.

Das hat insofern was mit der Frage zu tun, als ich dann weiss das die Menge der Values zum selben Key vollständig vorkam, sobald der Key wechselt. Und damit kann ich dann über die einzelnen Keys iterieren.

Christoph
02-06-2006, 09:36
Und hier zur Info die Lösung wie man nur über die Keys iteriert:


multimap<int,int> m;
multimap<int,int>::iterator i;
for (i = m.begin(); i != m.end(); i = m.upper_bound(i->first)) {
// do some stuff with key i->first
}