Anzeige:
Ergebnis 1 bis 8 von 8

Thema: <vector2> so sortieren, wie <vector1> sortiert wird

  1. #1
    Registrierter Benutzer
    Registriert seit
    20.08.2007
    Beiträge
    25

    <vector2> so sortieren, wie <vector1> sortiert wird

    Hallo zusammen ,

    ich benutze des öfteren die Containerklasse <vector> von C++. Diese bietet u.a. anderem ja auch eine integrierte sort-Funktion: vector.sort();

    Dabei ist mir des öfteren folgende Frage gekommen. Wenn ich nun zwei Vektoren habe. Der eine sei gefüllt (z.B.) mit double-Werten, der andere mit integer-Werten. Beide Vektoren sind in dem Sinne abhängig voneinander, dass das erste Vektorelement des vector1 zu dem ersten Vektorelement des vector2 gehört (verstehe die integerwerte etwa als Identifikationsnummern der double-werte o.ä.). ich will nun die double Werte sortieren. Wie sortiere ich die Integerwerte dementsprechend, so dass die Zugehörigkeit der Paare nach dem Sortieren immer noch besteht. Kurz gefragt:

    wie sortiere ich einen vector2 eben so, wie vector 1 mit der sort()-funktion sortiert wird? gibt es da einen einfachen befehl?

    Danke schon mal für eure Hilfe.

  2. #2
    Registrierter Benutzer Avatar von jeebee
    Registriert seit
    01.01.2005
    Ort
    Bern || Zürich
    Beiträge
    540
    das tönt nach einem Fall für std::map.
    my very own 128 bit integer
    C4 D3 B8 A8 9E A0 C6 EC 7D EC A8 15 28 D1 92 58
    more information

  3. #3
    Registrierter Benutzer
    Registriert seit
    23.05.2004
    Beiträge
    592
    ich benutze des öfteren die Containerklasse <vector> von C++. Diese bietet u.a. anderem ja auch eine integrierte sort-Funktion: vector.sort();
    Laut Standard gibt es diese Funktion nicht. Es gibt den Container "list", der hat eine Memberfunktion "sort", weil für Listen die generische Sortierfunktion nicht ganz ideal arbeitet. Für vector kann die generische aber gut arbeiten.

    Zu deinem eigentlichen Problem:
    Eine einfache Funktion gibt es dafür nicht. Ich glaube du musst die Indizes und die Double-Werte zusammen sortieren, also in einem Container. Dazu wird es nötig sein, dass du eine eigene Vergleichsfunktion schreibst, welche nur die Double-Werte berücksichtigt.

    Eine Map hilft dir dazu glaube ich erstmal nicht weiter, weil du die Integer ja nicht als Index in die Doubles benutzt (oder doch?).

    Für die Zukunft fände ich es auch ganz nützlich, wenn C++ noch eine weitere Sortierfunktion böte, welche nicht nur die Eingabesequenz sortiert, sondern den Austausch der Elemente auch an einer zweiten Sequenz vornimmt. Der zweite Technichal Report für Erweiterungen der C++ Bibliothek ist ja noch nicht verabschiedet, evtl. möchtest du ja ein Paper diesbezüglich für das C++ Komitee schreiben.

  4. #4
    Registrierter Benutzer
    Registriert seit
    20.08.2007
    Beiträge
    25
    danke schon mal für eure antworten

    Zitat Zitat von jeebee Beitrag anzeigen
    das tönt nach einem Fall für std::map.
    kannte ich noch gar nicht, beim drüberschauen sah es so aus, als könnte ich damit was anfangen, muss ich mir aber erst mal genauer anschauen

    Zitat Zitat von locus vivendi Beitrag anzeigen
    Laut Standard gibt es diese Funktion nicht. Es gibt den Container "list", der hat eine Memberfunktion "sort", weil für Listen die generische Sortierfunktion nicht ganz ideal arbeitet. Für vector kann die generische aber gut arbeiten.
    du hast natürlich recht, hatte das falsch im Kopf, bei meinem problem handelte es sich auch immer um Listen der Container-Klasse <list>

    Zitat Zitat von locus vivendi Beitrag anzeigen
    Zu deinem eigentlichen Problem:
    Eine einfache Funktion gibt es dafür nicht. Ich glaube du musst die Indizes und die Double-Werte zusammen sortieren, also in einem Container. Dazu wird es nötig sein, dass du eine eigene Vergleichsfunktion schreibst, welche nur die Double-Werte berücksichtigt.
    das habe ich auch schon mal wo gelesen (hatte gedacht, vielleicht gibt es eine einfachere methode), diese Vergleichsfunktion wird dann als drittes argument übergeben oder?

    also listname.sort(anfang, ende, vergleichsfunktion)

  5. #5
    Registrierter Benutzer
    Registriert seit
    23.05.2004
    Beiträge
    592
    [...]diese Vergleichsfunktion wird dann als drittes argument übergeben oder?

    also listname.sort(anfang, ende, vergleichsfunktion)
    Anfang und Ende sind implizit, die kennt das Listenobjekt selber. Sowas schaust du am besten in einer Referenz nach, z.B. der von Dinkumware.

  6. #6
    Registrierter Benutzer
    Registriert seit
    20.08.2007
    Beiträge
    25
    ..........
    Geändert von TheTraina (18-06-2010 um 00:41 Uhr) Grund: Inhalt unwichtig

  7. #7
    Registrierter Benutzer
    Registriert seit
    20.08.2007
    Beiträge
    25
    habe (leider erst jetzt) es geschafft mich wieder mit dem problem zu beschäftigen, in dem ich das parallele sortieren von vektoren brauchte.

    Zitat Zitat von jeebee Beitrag anzeigen
    das tönt nach einem Fall für std::map.
    das hat mir sehr geholfen und es hat einwandfrei geklappt . musste nur anstatt einer einfachen map eine multimap benutzen, in der die keys nicht eindeutig sein müssen. vielen dank noch mal für diesen tipp .

    beste grüße
    Geändert von TheTraina (18-06-2010 um 00:43 Uhr)

  8. #8
    Registrierter Benutzer
    Registriert seit
    23.05.2004
    Beiträge
    592
    Da war ich wohl etwas auf dem Holzweg mit meinem Verdacht das die Map nicht das Richtige für dich wäre. Eine Map ist ja immer sortiert und wie der Name schon andeutet auch und gerade dafür gedacht schnell zugeordnete Werte aufzufinden - beides Eigenschaften die ich anhand deiner Problembeschreibung nicht für wesentlich gehalten hatte. Deshalb bin ich gedanklich näher an der Vector-Lösung gewesen die noch etwas mehr mit deiner (ursprünglichen) Beschreibung gemein hätte.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •