| Autor |
Nachricht |
Mathias1986
Mitglied
Benutzerprofil
Anmeldungsdatum: 30.07.2012
Beiträge: 28
|
Mathias1986 Mitglied
16:40:36 06.08.2012 Titel: |
multimap |
Zitieren |
Hi,
ich habe eine Multimap folgendermaßen angelegt:
| C++: | | multimap<int, string> Test; | |
Dort liegen jetzt lauter (int,string)-Kombis auf die ich mit einem iterator natürlich locker zugreifen kann.
Jetzt habe ich folgenden Code:
| C++: | | multimap<int, string>::iterator it = Test.begin(); | |
Jetzt zeigt dieser Iterator it auf das erste pair.
Meine Fragen:
Ist dieses pair immer dasjenige, welches den kleinsten int-Wert hat egal in welcher Reihenfolge ich die multimap gefüllt habe?
Da wir es mit einer multimap zu tun haben könnte der kleinste int-Wert ja auch mehrere strings parat haben. Welcher wäre hier der erste?
Die zweite Frage ist für mich nicht relevant da ich nur nach dem Iterator des kleinsten bzw größten (das wäre dann Test.end()) int-Wert suche.
Danke schonmal |
|
|
|
 |
Mathias1986
Mitglied
Benutzerprofil
Anmeldungsdatum: 30.07.2012
Beiträge: 28
|
Mathias1986 Mitglied
17:15:09 06.08.2012 Titel: |
|
Zitieren |
Oh falsche KAtegorie ... eigentlich sollte das natürlich ins C++ (auch C++0x und C++11) ... Kann das bitte jemand verschieben? |
Zuletzt bearbeitet von Mathias1986 am 17:15:31 06.08.2012, insgesamt 1-mal bearbeitet |
|
 |
C++ Forumbot
Forumbot
Benutzerprofil
Anmeldungsdatum: 29.02.2004
Beiträge: 17120
|
C++ Forumbot Forumbot
09:00:30 07.08.2012 Titel: |
|
Zitieren |
|
 |
Furble Wurble
Unregistrierter
|
Furble Wurble Unregistrierter
09:34:10 07.08.2012 Titel: |
|
Zitieren |
Warum lädtst Du Dir nicht den Standard runter und schaust selbst nach? Zumindest das letzte working draft gibt es hier: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/ (Das Dokument N3337.)Die Unterschiede zur letztendlichen Veröffentlichung sind wohl allgemein kosmetischer Natur.
Als Wegweiser:
- Die Antwort auf die erste Frage steht in 23.2.4/2, bzw. in 23.4.5.
- Zur zweiten Frage. So wie ich das lese steht die Antwort in 23.2.4/4.
Kannst ja mal schreiben, wie Du nach der Lektüre Deine Fragen beantworten würdest.
Ich hoffe Du verzeihst mir die Nichtbeantwortung und siehst den hohen pädagogischen Wert meines Postings.
Wenn es natürlich technische Gründe gibt, dass Du nicht selber nachgeschaut hast, bin ich mir sicher, dass das jemand für Dich tun wird. |
|
|
|
 |
Mathias1986
Mitglied
Benutzerprofil
Anmeldungsdatum: 30.07.2012
Beiträge: 28
|
Mathias1986 Mitglied
09:55:00 07.08.2012 Titel: |
|
Zitieren |
| Furble Wurble schrieb: |
Ich hoffe Du verzeihst mir die Nichtbeantwortung und siehst den hohen pädagogischen Wert meines Postings.
|
Nee, genau so eine Antwort wünsch ich mir, ich will es ja auch in Zukunft selber lösen.
Mal sehen ob ich das richtig sehe:
Erste Frage:
| C++: | | ordering on elements of Key. | |
Frage kann man also mit ja beantworten würde ich sagen, erster Iterator zeigt auf pair mit kleinstem int Wert.
Zweite Frage:
| C++: | | preserve the relative ordering of equivalent elements. | |
Hmm, ganz check ichs nicht. Mein iterator mit .begin() zeigt wohl immer noch auf ein pair mit kleinstem int Wert, aber welches ist jetzt genau das Erste? Das was länger im Container liegt?
Vielleicht verstehe ich aber auch alles falsch
Danke! |
|
|
|
 |
Caligulaminus
Mitglied
Benutzerprofil
Anmeldungsdatum: 12.01.2011
Beiträge: 294
|
Caligulaminus Mitglied
10:32:31 07.08.2012 Titel: |
|
Zitieren |
| Mathias1986 schrieb: | | Das was länger im Container liegt? |
Du liegst da schon ganz richtig. Ich glaube allerdings, daß die Aussage erst ab C++11 gilt. |
_________________ Die Zither ist entzwei! an der ist nichts zu halten.
|
|
 |
Furble Wurble
Unregistrierter
|
Furble Wurble Unregistrierter
10:35:59 07.08.2012 Titel: |
|
Zitieren |
| Mathias1986 schrieb: | Erste Frage:
| C++: | | ordering on elements of Key. | |
Frage kann man also mit ja beantworten würde ich sagen, erster Iterator zeigt auf pair mit kleinstem int Wert. | Das stimmt solange die Sortierreihenfolge Key der Größe nach aufsteigend sortiert. Das ergibt sich aus dem Compare Objekt, dass Du beim erstellen der multimap mit angeben kannst:| C++11 schrieb: | 23.4.5 Class template multimap
| C++: | namespace std {
template <class Key, class T, class Compare = less<Key>,
class Allocator = allocator<pair<const Key, T> > >
class multimap {
//...
}; | |
| Ich kann die Sortierreihenfolge also auch einfach umdrehen:| C++: | | multimap<int, string, std::greater<int>> Test; | |
| Mathias1986 schrieb: | Zweite Frage:
| C++: | | preserve the relative ordering of equivalent elements. | |
Hmm, ganz check ichs nicht. Mein iterator mit .begin() zeigt wohl immer noch auf ein pair mit kleinstem int Wert, aber welches ist jetzt genau das Erste? Das was länger im Container liegt? | Ich habe das bis eben genauso verstanden...allerdings hast Du mich gerade verunsichert...
Aber es ist tatsächlich so: die Garantie liegt in dem von Dir zitierten 23.2.4/4. und in der Tabelle 102, wo folgendes für a_eq.insert(t) steht:| C++11 schrieb: | 23.2.4 Table 102
a_eq.insert(t) Effects: Inserts t and returns the iterator pointing to the newly inserted element. If a range containing elements equivalent to t exists in a_eq, t is inserted at the end of that range. |
Und Caligulaminus hat recht: das steht erst seit C++11 so im Standard. |
|
|
|
 |
|
Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben. Sie können auf Beiträge in diesem Forum antworten. Sie können Ihre Beiträge in diesem Forum nicht bearbeiten. Sie können Ihre Beiträge in diesem Forum nicht löschen. Sie können an Umfragen in diesem Forum nicht mitmachen.
|
|
|
|
|