» »

[C++] std::sort problem

[C++] std::sort problem

nejck ::

Pozdravljeni...

torej imam sledeč problem...

Rad bi sortiral vektor CPoint-ov glede na x koordinate tocke. Preiskal sem ze google ter msdn, in vse kar mi je uspelo je:

bool CPointPrimerjaj(CPoint cpStart, CPoint cpEnd)
{
return cpStart.x < cpEnd.x;
}

void CRisanje::RisiKonveksnoLupino(CDC* pDC, vector< CPoint > &tocke, int sirina)
{
std::sort(tocke.begin(),tocke.end(),CPointPrimerjaj);
CString test;
test.Format("%f %f %f %f", tocke[0], tocke[1], tocke[2], tocke[3]);
pDC->TextOutA(10,10,test);
}


povsod sem našel podatek, da naj bi to delovalo, a nekako mi to ne uspe....

Compiler mi javi error in sicer:
1>risanje.cpp(58) : error C3867: 'CRisanje::CPointPrimerjaj': function call missing argument list; use '&CRisanje::CPointPrimerjaj' to create a pointer to member
1>risanje.cpp(58) : error C2780: 'void std::sort(_RanIt,_RanIt)' : expects 2 arguments - 3 provided
1> d:\program files\microsoft visual studio 8\vc\include\algorithm(2751) : see declaration of 'std::sort'

Vsaka pomoč je dobrodošla ;)

Vnaprej hvala,
nejck
  • spremenilo: snow ()

Jean-Paul ::

Zmoti me to: error C2780: 'void std::sort(_RanIt,_RanIt)' : expects 2 arguments - 3 provided

Glede na dokumentacijo ( link) bi to moralo delati.

P.S.
V vsakem primeru pa bi bilo bolje, če bi v funkcijo za primerjanje nosil reference, recimo nekaj takega:

bool CPointPrimerjaj(const CPoint& cpStart, const CPoint& cpEnd)

nejck ::

sem poskusil tudi z referencami.....

cudno se mi zdi da ne deluje, ker po vsej dokumentaciji, ki sem jo pregledal bi moralo ;)

BigWhale ::

Prevedi primer std::sort iz MSDNja.

Da vidis, ce tisto dela.

nejck ::

jap msdn primer dela....

Genetic ::

Namesto
std::sort(tocke.begin(),tocke.end(),CPointPrimerjaj);

daj
std::sort(tocke.begin(),tocke.end(),::CPointPrimerjaj);

ali pa
std::sort(tocke.begin(),tocke.end(),ime_namespacea::CPointPrimerjaj);

ce je CPointPrimerjaj definiran v kaksnem namespace-u

v metodi
void CRisanje::RisiKonveksnoLupino(...)

nejck ::

CPointPrimerjaj je definiran v CRisanje in ravno tako ne deluje, tudi če ga poskusim klicat z CRisanje::CPointPrimerjaj ....

Jean-Paul ::

Aha, potem verjetno zajec tici v tem grmu. Mislim, da mora biti funkcija CPointPrimerjaj definirana globalno (ne sme biti member funkcija) oz. ce je member, mora biti definirana staticno. Za nalogo poskusi premisliti zakaj je temu tako.

Obstaja tudi druga moznost, ki pa zahteva, da ima doticni class definiran operator manjse. Potem lahko klices funkcijo std::sort samo s prvima dvema parametroma.

No, seveda pa se lahko tudi motim.

nejck ::

Jean-Paul: hvala ;) to reši problem ;) nikjer nisem zasledil, da mora biti funkcija definirana globalno :)

zadeva sedaj deluje ;)

Hvala vsem za pomoc.

LP,
nejck


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[C#] Sort za string (slovenska abeceda)

Oddelek: Programiranje
5972 (781) mihies
»

vector::iterator problemi, brisanje podatkov iz vektorja

Oddelek: Programiranje
81137 (988) mn
»

It means business (strani: 1 2 3 4 5 6 7 8 )

Oddelek: Znanost in tehnologija
37428392 (14391) Thomas
»

[C++] preprosto risanje

Oddelek: Programiranje
71670 (1547) popec
»

Program v c++

Oddelek: Programiranje
192030 (1699) Bela01

Več podobnih tem