set<int>mySet: Wie erstes Element in "int" speichern?
-
SeppJ schrieb:
Ich hoffe, das ist kein Programm, bei dem es bloß darum geht, das kleinste Element einer Menge zu finden. Das ginge auch deutlich einfacher.
Wie würde denn der deutlich einfachere Weg lauten, das kleinste Element eines "set" zu finden?
-
mireiner schrieb:
SeppJ schrieb:
Ich hoffe, das ist kein Programm, bei dem es bloß darum geht, das kleinste Element einer Menge zu finden. Das ginge auch deutlich einfacher.
Wie würde denn der deutlich einfachere Weg lauten, das kleinste Element eines "set" zu finden?
Das kleinste Element eines sets zu finden ist so schon richtig. Mit "Menge" meinte ich hier eine allgemeine Wertemenge, nicht die Datenstruktur "set" (auch wenn "set" übersetzt wird als "Menge"). Denn der Umweg über die Datenstruktur set, um das kleinste Element einer Wertemenge zu finden ist sehr umständlich. Da geht man einfacher die Wertemenge durch und merkt sich das jeweils kleinste Element. Das gibt's auch schon fertig in der Standardbibliothek.
-
Verstehe, dann kann ich das Thema endlich als gelöst betrachten und dank der Hilfe hier zufrieden in die heia fallen.

-
volkard schrieb:
int erstesElement= *(mySet.begin());begin() holt einen Iterator(fühlt sich an wie Zeiger) aufs erste Element. Und * schaut nach, welcher int da wohnt, wo der Iterator hinzeigt.
Aber Vorsicht, das funktioniert nur wenn begin() auch auf etwas verweist(also die Menge nicht leer ist) und damit mySet.begin() != mySet.end() ist.
-
Folgeproblem:
int letztesElement = *mySet.end(); Fehlermeldung: "set iterator not dereferenceable"Gibt es eine andere Möglichkeit an die in "mySet" gespeicherte letzte int Variable zu kommen?
-
-
Ich hatte es jetzt so gelöst. Ist aber nicht sehr schön:
set <int> ::iterator iter; iter = mySet.end(); iter--; int letztesElement = *iter;Das ist natürlich viel besser:
int letztesElement = *mySet.rbegin();Danke Volkard!
-
mireiner schrieb:
Ich hatte es jetzt so gelöst. Ist aber nicht sehr schön:
set <int> ::iterator iter; iter = mySet.end(); iter--; int letztesElement = *iter;Das ist AFAIK auch falsch.
end()dekrementieren ist soweit ich weiss nur fürvector,list,dequegarantiert.
-
hustbaer schrieb:
mireiner schrieb:
Ich hatte es jetzt so gelöst. Ist aber nicht sehr schön:
set <int> ::iterator iter; iter = mySet.end(); iter--; int letztesElement = *iter;Das ist AFAIK auch falsch.
end()dekrementieren ist soweit ich weiss nur fürvector,list,dequegarantiert.? set hat auch Bidirektionale Iteratoren.
-
Oha. Ich wusste nicht dass bidi Iteratoren garantieren müssen dass end-Dekrement OK ist.