wytrzzeszcz
#programowanie #cpp #naukaprogramowania
mam takiego potwora:
union ptr
{
record* rec;
char* raw;
};
ptr* bufferdata;
buffer
data jest tworzony tak
this->bufferdata = new ptr[BUFFERSIZE*size];
i teraz chce by mi ta tablica rekordów została posortowana przy pomocy std:qsort
jak mam tego qsorta zawołać bo nie jestem pewien czy
std::qsort(buffer_data, size*BUFFERSIZE, 4,bufferdata->rec->operator<=);
to poprawna metoda
  • Najlepsze
  • Wszystkie komentarze
KrzaQ2
@wytrzzeszcz: Dlaczego nie uƶyjesz std::vector?
patrolez
@wytrzzeszcz: ten potwór wygląda bardziej na "C" style, a nie C++.
http://en.cppreference.com/w/cpp/algorithm/qsort
KrzaQ2
@wytrzzeszcz: to komuś słabiutko idzie przyswajanie faktów. qsort jest duƶo gorszy od std::sort, bo uniemoƶliwia optymalizację.

W kaƶdym razie: qsort wymaga funkcji zwracającej trzy stany (mniejsze, równe, większe), std::sort potrzebuje lessthan gwarantującego strict weak ordering. Czyli normalny < dla intów.

std::sort(buffer_data, buffer_data+BUFFER_SIZE, cmp) i gotowe
wytrzzeszcz
wytrzzeszcz Autor
0
@KrzaQ2: @patrolez: no tak kod jest w C+ (C z hehe klasami i to też nie takimi full ładnymi)
bo z definicji buffor jest statyczy i jakoś tak mi łatwiej nad nim zapanować
ogólnie to chyba chciałem zapytać
JAK NA SZYBKOŚCI POSORTOWAĆ CZORTA.
fajnie jak nie będzie to mocno od Cstyle odbiegało
KrzaQ2
@wytrzzeszcz: Z jakiej definicji?
wytrzzeszcz
wytrzzeszcz Autor
0
@KrzaQ2: tej co pokazali na wykładzie :)
ogolnie to ładuje surowe dane z dysku (dlatego jest ten union)
robię na tym magię i zwracam na dysk
patrolez
@wytrzzeszcz: wracając do meritum :D Ostatni parametr ma być wskaźnikiem na funkcję o sygnaturze takiej, jak zaprezentowali ci w dokumentacji.

W nowoczesnym C++ możesz władować tam lambdę. W "C" style będziesz musiał zdefiniować funkcję i jej nazwę wpakować jako argument.

Krótko mówiąc - wszystko jest w dokumentacji :D Mogłeś jedynie tutaj nie znać pojęcia "wskaźnik na funkcję".
wytrzzeszcz
wytrzzeszcz Autor
0
@patrolez: no i klasa rekodr ma metodę pasującą do dokumentacji
ale ta ścieżka do tej metody jakaś taka dzika mi się wydaje
patrolez
@wytrzzeszcz: nawet, jeżelibyś podał poprawnie ten operator, to on nie spełnia wymagań sygnatury dla std::qsort.

std::qsort to w sumie funkcja z języka "C", a C++ trzyma kompatybilność i masz odpowiednie biblioteki: cstdlib w C++ to wrapper na stdlib.h

Jeżeli chcesz używać tego std::qsort, to dokumentacja w "C" ci pomoże bardziej.
http://en.cppreference.com/w/c/algorithm/qsort
wytrzzeszcz
wytrzzeszcz Autor
0
@KrzaQ2: wiem że qsort ogólnie jest śrenii ale przy 10 elementach to bomblekowe pyknie
@patrolez: to może tłumaczyć czemu VS podpowiedziało mi qsorta a nie sort
patrolez
@wytrzzeszcz: Może z kontekstu?
Może wcześniej jest jakiś std::qsort był użyty w projekcie?
Może miałeś już wcześniej include na cstdlib i ci podpowiedział tylko co miałeś "władowane" w kontekst?

Nie używam VS jako IDE do C++ i nie wiem jak to podpowiadanie tam śmiga. Podejrzewam wersję numer 3.

Deklaracja std::sort jest w innym nagłówku.
wytrzzeszcz
wytrzzeszcz Autor
0
@patrolez: no mowie (3)
wytrzzeszcz
wytrzzeszcz Autor
0
@KrzaQ2: @patrolez: dobra rano rzucę okiem i tego dzięki za pomoc chłpaki a teraz opadam spać
patrolez
@wytrzzeszcz: jak dopiszesz #include , to pewnie będziesz miał i std::sort.
http://en.cppreference.com/w/cpp/algorithm/sort

Ja tych nagłówków nie biorę z sufitu, tylko z dokumentacji, która ma wyszukiwarkę :P