Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Sortowanie listy przy pomocy STL

Ostatnio zmodyfikowano 2016-05-01 06:13
Autor Wiadomość
anors
Temat założony przez niniejszego użytkownika
Sortowanie listy przy pomocy STL
» 2016-04-30 21:27:23
Próbowałem posortować listę za pomocą iteratorów i wyskakują mi błędy w pliku algorithm, m. in. C2784.

Deklaracja list i fragment kodu:
C/C++
list < Object *> objects;
list < Object *>::iterator objectsIt;


sort( objects.begin(), objects.end() );
cout << "List: ";
for( objectsIt = objects.begin(); objectsIt != objects.end(); objectsIt++ )
{
    cout << * objectsIt << " ";
}
cout << endl;
P-147804
carlosmay
» 2016-04-30 21:38:16
Co to jest ten obiekt Object *?
P-147806
Monika90
» 2016-04-30 21:45:01
Nie da się posortować listy za pomocą std::sort. Jeżeli już musisz ją sortować (wg adresów), to tak:
C/C++
objects.sort( std::less <>() );

A najlepiej użyj wektora.
P-147807
anors
Temat założony przez niniejszego użytkownika
» 2016-04-30 21:46:41
Wskaźnik na obiekty typu Object. Jest to klasa.
C/C++
class Object
{
public:
    int nr;
    string imie, nazwisko;
    void wypisz_dane();
    Object() { }
    virtual ~Object() { }
};
/[ cpp ]
P-147808
carlosmay
» 2016-04-30 22:31:20
cout << * objectsIt << " ";
 zamień na

( * objectIt ).wypisz_dane();
 lub
objectIt->wypisz_dane();

Do sortowanie obiektów napisz funkcję porównującą wg kryteriów jakie uważasz za właściwe (predykat)
i użyj jako parametr metody list.sort(predykat);.
P-147815
mateczek
» 2016-05-01 06:13:53
C/C++
//mały przykład
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

class czlowiek
{
    int wiek;
    string imie, nazwisko;
public:
    czlowiek( int w, string im, string naz )
        : wiek( w )
         , imie( im )
         , nazwisko( naz )
    {
       
    }
    bool operator <( const czlowiek & c ) {
        //  return wiek<c.wiek; //sortowanie po wieku
        return imie < c.imie;
        //  return nazwisko<c.nazwisko;
    }
    friend ostream & operator <<( ostream & s, czlowiek & c );
};

std::ostream & operator <<( std::ostream & s, czlowiek & c ) {
    return s << "imie " << c.imie << "\r\n" << "nazwisko " << c.nazwisko << "\r\n" << "wiek " << c.wiek << "\r\n" << endl;
    //return s;
}


int main()
{
    vector < czlowiek > v { { 13, "marek", "marecki" }, { 20, "piotrek", "piotrowski" }, { 10, "adam", "ziemowit" }, { 33, "zygmunt", "adamek" } };
    for( czlowiek & c: v ) {
        cout << c;
    }
    sort( v.begin(), v.end() );
    cout << endl;
    cout << "=============\r\nposortowany\r\n=============" << endl;
   
    for( czlowiek & c: v ) {
        cout << c;
    }
}
P-147820
« 1 »
  Strona 1 z 1