elemenieren von Dublicates



  • Halli Hallo,

    ich habe einen vector< vector< int >> lo_2DVec;

    in dem vector besitze ich nun Zahlenkolonen

    1 | 1 | 3 | 5 | 7 | 10
    3 | 4 | 5 | 9 | 9 | 13
    7 | 0 | 0 | 8 | 9 | 22
    1 | 1 | 3 | 5 | 7 | 10
    

    Die Zeilen selber sin sorttiert.
    Ich möchte nun alle Doppelten ZEILEN löschen ( hier wäre es die Zeile 4 ) .
    Gibt es da was ( z.B. std::unique ) oder muss ich das selbst implementieren ?
    Ich Baue mir mom. aus den Zeilen einen Strin auf und den vergleiche ich dann um mir die Doppelten rauszususchen ...

    Besten Dank

    Djole



  • Versuch mal folgendes:

    sort(begin(vec), end(vec));
    auto it = unique(begin(vec), end(vec));
    vec.resize(it - begin(vec));
    

    std::unique war schon ein guter gedanke. Du musst nur noch zusätzlich einen comparator übergeben, weil std::vector kein operator == hat.
    unique löscht die elemente nicht wirklich, sondern schiebt sie ans ende, deswegen muss man am ende noch resizen (man hätte auch erase benutzen können).

    Ich hab jetzt einfach mal angenommen, dass du einen C++0x-fähigen compiler hast.



  • Um std::unique (sinnvoll) anwenden zu können, muß der Container (vector) erst sortiert sein. Außerdem müssen anschließend noch die doppelten Elemente entfernt werden (da std::unique diese nur ans Ende verschiebt).

    Hier ein Auszug aus "Die C++ Programmiersprache" (18.6.3 Unique):

    template<class C> void duplikate_entfernen(C& c)
    {
      sort(c.begin(), c.end();
      typename C::iterator p = unique(c.begin(), c.end());
      c.erase(p, c.end());
    }
    


  • Danke für die schnelle Rückmeldung ....



  • Djole schrieb:

    Halli Hallo,

    ich habe einen vector< vector< int >> lo_2DVec;

    in dem vector besitze ich nun Zahlenkolonen

    1 | 1 | 3 | 5 | 7 | 10
    3 | 4 | 5 | 9 | 9 | 13
    7 | 0 | 0 | 8 | 9 | 22
    1 | 1 | 3 | 5 | 7 | 10
    

    Hier geht noch nicht hervor, ob der innere Vector nun Zeilen oder Spalten repräsentiert.



  • Nein, da fehlt nichts. Djole hat doch geschrieben, daß er "ZEILEN löschen" will 😉



  • Th69 schrieb:

    Nein, da fehlt nichts. Djole hat doch geschrieben, daß er "ZEILEN löschen" will 😉

    ja, aber sind Zeilen nun lo_2DVec[x][1]...lo_2DVec[x][n] oder lo_2DVec[1][x]...lo_2DVec[n][x]. Das eine nennt man row-major, das andere column-major format.


Anmelden zum Antworten