PDA

View Full Version : [C++] Utilizzo metodo Sort (da Standard Template Library di visual studio .net)


Krammer
26-10-2006, 00:32
Sto sbattendo la testa da ore e non ne vengo a capo.
Premetto che il linguaggio C++ lo sto imparando in questi giorni, in precedenza avevo usato solo Java.

Sto creando un progetto di grafica con Visual Studio .net 2005, ho creato una classe Point2d che contiene esclusivamente le 2 variabili coordinate X e Y, il costruttore ed i metodi GetX() e GetY() per risalire alle coordinate del punto

questi oggetti-punto li devo inserire in una lista e li devo ordinare esclusivamente secondo la variabile X.

per creare la lista ho usato il comando list<Point2d*> l;, per inserire gli elementi il metodo l.push_back(p); dove l č la variabile lista e p la variabile Point2d
fin qua tutto ok.
il problema č l'ordinamento! se uso il metodo standard l.sort() ovviamente non ordina come voglio io (in ordine crescende a seconda della coordinata X)
allora nella classe Point2d ho inserito il metodo ComparePoint2d(Point2d a, Point2d b) che mi restituisce 1, 0, -1 a seconda dei casi.
Quello che non capisco č il modo di dire al compilatore di ordinare la list utilizzando questo metodo di sorting da me determinato.
Su msdn ho trovato questa pagina (http://msdn2.microsoft.com/it-it/library/w56d4y5z.aspx) che in teoria spiega come risolvere il mio problema, ma proprio non riesco ad implementarlo.
Ho provato usando il comando l.Sort(gcnew Comparison<Point2d>(ComparePoint2d)); ma non funziona: mi dice che l'identificatore gcnew non č dichiarato (in effetti non l'ho mai usato gcnew prima d'ora, non so nemmeno cosa sia :muro: )

premetto subito che potrei risolvere il problema implementando da zero un metodo mergesort ad hoc per il mio scopo, ma vorrei utilizzare se possibile i metodi di sort predefiniti in visual studio


datemi una mano pls, lunedė prox devo consegnare il progetto finito e sono a dir poco in alto mare con tutto :cry: :cry:

cionci
26-10-2006, 19:34
Quella pagina fa parte del framework .Net...non č il sort del framework standard del C++...
Questo č il sort della STL: http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/vcstdlib/html/vclrfalgorithmsort.asp

Krammer
26-10-2006, 21:02
grazie della risposta.
cmq alla fine ero riuscito a risolvere, cosė:

nel main:

inline bool Compare2Point(Point2d* left, Point2d* right)
{
int leftX, rightX;
leftX = left->GetX();
rightX = right->GetX();
return leftX < rightX;
}
...
...
...
l.sort(Compare2Point);


dove l č una variabile lista di tipo Point2d



il fatto č che volevo mettere il metodo di Compare2Point tra due punti all'interno della stessa classe point2d invece che nel main, ma cosė facendo non mi accettava la funzione di comparazione nel metodo sort (naturalmente Compare2Point all'interno di point2d l'avevo definito come public)