#programowanie #cpp #naukaprogramowania mam takiego potwora: union ptr { record* rec; char* raw; }; ptr* bufferdata; bufferdata 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
@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: 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
@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
@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.
mam takiego potwora:
union ptr
{
record* rec;
char* raw;
};
ptr* bufferdata;
bufferdata 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
std::vector?http://en.cppreference.com/w/cpp/algorithm/qsort
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
ogolnie to ładuje surowe dane z dysku (dlatego jest ten union)
robię na tym magię i zwracam na dysk
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ę".
ale ta ścieżka do tej metody jakaś taka dzika mi się wydaje
qsortjest duƶo gorszy odstd::sort, bo uniemoƶliwia optymalizację.W kaƶdym razie:
qsortwymaga funkcji zwracającej trzy stany (mniejsze, równe, większe),std::sortpotrzebuje lessthan gwarantującego strict weak ordering. Czyli normalny<dla intów.std::sort(buffer_data, buffer_data+BUFFER_SIZE, cmp)i gotowestd::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
@patrolez: to może tłumaczyć czemu VS podpowiedziało mi qsorta a nie sort
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.
#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
Komentarz usunięty przez autora