Wpis z mikrobloga

#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
  • 15
@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
@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: 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: 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.