Sortowanie dwuwymiarowej tablicy string metodą qsort()

0

Mam dwuwymiarową tablicę string w której znajdują się roznej dlugosci ciagi znakow

tablica posiada 3 kolumny i N wierszy.

ewentualnie tej samej dlugosci mogą być odpowiednio np
pierwszy element w kolumnie jest takiej samej dlugosci jak pierwszy element w nastepnym wierszu. Zobrazuję to:
[quote]
blah bvkjnsvbkrnj kvjfnvbfkjb
kfvf bvkjnsvbkrnk kvjfnvbfkjc
.
.
.
itd
[/quote]

Teraz mam zadanie posortować alfabetycznie wiersze zależnie którą kolumną chcę je sortować.
Sortowanie bombelkowe działa tu bez problemu, ale musze koniecznie użyć metody:
qsort()

Jak ma wyglądać taki kod? (ten ponizej i reszta potrzebnych linijek)
[kod=c++]
//czy to ma być jakoś specjalnie modyfikowane pod tablicę dwuwymiarową?
int compare (const void a, const void b)
{
return ( (int)a - (int)b );
}

[/kod]

0

A jak tablica wygląda (jak jest zadeklarowana)?

Bo może to być np. coś takiego:

#include <string>
#include <vector>
#include <cstring>
#include <cstdlib>
using namespace std;

struct Wiersz {
    string elementy[3];

    string &operator [] (int kolumna) { return this->elementy[kolumna]; }
    const string &operator [] (int kolumna) const { return this->elementy[kolumna]; }
};

int compare_by_col1(const void * a, const void * b)
{
    const Wiersz &wa = *(const Wiersz*)a;
    const Wiersz &wb = *(const Wiersz*)b;
        return strcmp(wa[0].c_str(), wb[0].c_str());
}

int compare_by_col2(const void * a, const void * b)
{
    const Wiersz &wa = *(const Wiersz*)a;
    const Wiersz &wb = *(const Wiersz*)b;
        return strcmp(wa[1].c_str(), wb[1].c_str());
}

int compare_by_col3(const void * a, const void * b)
{
    const Wiersz &wa = *(const Wiersz*)a;
    const Wiersz &wb = *(const Wiersz*)b;
        return strcmp(wa[2].c_str(), wb[2].c_str());
}

int main()
{ 
    vector<Wiersz> tablica;

    /* ... tablica.push_back(); ... */

    qsort(&tablica.front(), tablica.size(), sizeof(Wiersz), compare_by_col1);
}
0

Tak wyglada ta tablica:

 string kolumny[iloscWierszy][2];
0
typedef string Wiersz[2];

int compare_by_col1(const void * a, const void * b)
{
        const Wiersz &wa = *(const Wiersz*)a;
        const Wiersz &wb = *(const Wiersz*)b;
        return strcmp(wa[0].c_str(), wb[0].c_str());
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0