Sortieren von Vektoren



  • Hallo,

    ich möchte einen Vector<int> so sortieren, dass jede Zahl max einmal vorkommt!

    Basp: v = 1 5 3 1 7 5 6 1 5

    --> sortx(v)= 1 3 5 6 7

    hat da jemand eine einfache Lösung(Algorithmus/befehl parat?!?

    thx4help

    PS: ich hab mal was von eine unique-Fkt gehört, die in <algorith> drin sein soll, weiß aber net, wie man die anwenden könnte... 😞



  • google => "STL unique" "STL sort"



  • @Ben04: erstmal danke für den schnellen post. Bei deiner angegeben google-Suche kommt man auf ne Dokterarbeit, die mir nicht gerade weiterhilft *g

    ich dache mir ja folgendes:

    vector<int> pos_pointer (0);  
    ...//belege pos_pointer
                  sort(pos_pointer.begin(), pos_pointer.end());
                  unique (pos_pointer.begin(), pos_pointer.end());
    

    ... aber das läuft leider nicht 😞

    PS: wenn ihr das lest, werdet ihr wohl sicher merken, dass die Namenswahl meiner Variablen nicht die beste ist...



  • die Zahlen stehen dann zwischen pos_pointer.begin() und dem, was std::unique zurücklifert.

    vector<int> pos_pointer (0);   
    ...//belege pos_pointer 
    
    sort(pos_pointer.begin(), pos_pointer.end()); 
    vector<int>::iterator newEnd = unique (pos_pointer.begin(), pos_pointer.end());
    


  • und wie kann ich mir den sortierten und verkürzten vector dann anzeigen (ohne den doppelten rest...)?!?

    (ich fühl mich grade ziemlich doof...:( )



  • vector<int> pos_pointer (0);   
    ...//belege pos_pointer 
    
    sort(pos_pointer.begin(), pos_pointer.end()); 
    vector<int>::iterator newEnd = unique (pos_pointer.begin(), pos_pointer.end());
    
    for (vector<int>::iterator it = pos_pointer.begin(); it != newEnd; ++it)
       cout << it << '\n';
    

    oder

    vector<int> pos_pointer (0);   
    ...//belege pos_pointer 
    
    sort(pos_pointer.begin(), pos_pointer.end()); 
    vector<int>::iterator newEnd = unique (pos_pointer.begin(), pos_pointer.end());
    
    copy (pos_pointer.begin(), newEnd, ostream_iterator<int>(cout, "\n");
    

    oder, oder, oder ...



  • danke für diese kleine lehrstunde 🙂



  • Du kannst auch mit "pos_pointer.erase(newEnd;pos_pointer.end());" die überflüssigen Duplikate komplett löschen.


Anmelden zum Antworten