Miszcz Napisano Grudzień 12, 2011 Zgłoszenie Share Napisano Grudzień 12, 2011 Witam. Chciałbym się dowiedzieć w jaki sposób można posortować tablicę wskaźników. Problem wygląda tak- mam zwykłą tablicę struktur i robię do niej drugą tablicę- wskaźników. Teraz chciałbym ją przesortować(wskaźniki) w taki sposób żeby oryginalna tablica została nieruszona. Mój kod wygląda tak: int DataEngine::struct_cmp_by_product(const void *a, const void * { struct Tplyta *ia = (struct Tplyta *)a; struct Tplyta *ib = (struct Tplyta *)b; return QString::compare(ia->mark,ib->mark); } void DataEngine::Sort() { Tplyta *tableSort = table; qsort(tableSort, rowcount, sizeof(struct Tplyta),struct_cmp_by_product); } Ten sposób wyżej działa(sortuje), ale zmienia mi oryginalną tablice. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
thof Napisano Grudzień 12, 2011 Zgłoszenie Share Napisano Grudzień 12, 2011 ...robię do niej drugą tablicę- wskaźników. Właśnie chodzi o to, że w ten sposób nie robisz robisz tablicy wskaźników, ale wyłącznie wskaźnik na pierwszy element (początek tablicy). Przykładowe rozwiązanie http://stackoverflow.com/questions/6481142/how-do-i-sort-this-array-of-pointers-without-changing-the-sort-of-the-original-a Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Miszcz Napisano Grudzień 12, 2011 Autor Zgłoszenie Share Napisano Grudzień 12, 2011 Wlasnie chodzi o to, ze w ten sposób nie robisz robisz tablicy wskazników, ale wylacznie wskaznik na pierwszy element (poczatek tablicy). Przykladowe rozwiazanie http://stackoverflow.com/questions/6481142/how-do-i-sort-this-array-of-pointers-without-changing-the-sort-of-the-original-a Poprawilem to(chyba), ale niestety ciagle mi sortuje oryginalna tablice. int DataEngine::struct_cmp_by_product(const void *a, const void *{ const struct Tplyta **ia = (const struct Tplyta **)a; const struct Tplyta **ib = (const struct Tplyta **)b; return QString::compare(**ia->mark,**ib->mark); //To mi tu nie przechodzi. } void DataEngine::Sort(){ *tableSort = &table[0]; for (int i = 0; i < rowcount; i++) { tableSort[i] = &table[i]; } qsort(tableSort, rowcount, sizeof(struct Tplyta *),struct_cmp_by_product); } Próbowalem juz wczesniej przyklad z linka, bezskutecznie. Nie moge sie dostac do elementu ze struktury, zeby porównac. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
thof Napisano Grudzień 12, 2011 Zgłoszenie Share Napisano Grudzień 12, 2011 Nie zrozumiałeś. Musisz utworzyć tablicę wskaźników o rozmiarze tablicy table, czyli <typ> *tableSort[rowcount] i wtedy dopiero przypisać pojedyncze wskaźniki elementów table w pętli. Później już sortujesz tak jak to zapisałeś. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się