Skocz do zawartości

Jak Posortować Tablicę Wskaźników.?


Miszcz

Rekomendowane odpowiedzi

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

...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

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

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ę
×
×
  • Dodaj nową pozycję...