Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   

Die mobilen Seiten von c++.de:
http://m.c-plusplus.de
Infos hier [BETA]

  
c++.de :: C++ (auch C++0x und C++11) ::  multimap     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
Mathias1986
Mitglied

Benutzerprofil
Anmeldungsdatum: 30.07.2012
Beiträge: 28
Beitrag 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
Beitrag 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
Beitrag C++ Forumbot Forumbot 09:00:30 07.08.2012   Titel:              Zitieren

Dieser Thread wurde von Moderator/in Jochen Kalmbach aus dem Forum C++/CLI mit .NET in das Forum C++ (auch C++0x und C++11) verschoben.

Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?


Dieses Posting wurde automatisch erzeugt.

_________________
Besuchen Sie unsere Bücherecke.
http://www.c-plusplus.de/bucher.php
Mit jeder Bestellung unterstützen Sie das Forum.
Furble Wurble
Unregistrierter




Beitrag 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
Beitrag 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
Beitrag 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




Beitrag 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.
c++.de :: C++ (auch C++0x und C++11) ::  multimap   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




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.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.