sorting - cli C++ sort a objectlist on a certain property -
i want sort list on property.
i've got linepiece
object following properties:
string^ type; int x, y, x2, y2; system::string^ text;
now have list these linepieces
, want sort them on x value
.
i found in list->sort();
need give information. don't know how tell sort list on x value.
so how can sort list on x value of object?
if read between lines of question, sounds want sort based on x
value, , want sort based on y
value. if case, i'd implement comparer object, , pass list->sort()
specify how should sorted.
public ref class comparebyx : comparer<linepiece^> { public: virtual int compare(linepiece^ a,linepiece^ b) override { return a->x.compareto(b->x); } }; int main(array<system::string ^> ^args) { list<linepiece^>^ list = ... list->sort(gcnew comparebyx()); }
on other hand, if linepiece
has single, innate, universal sorting order, i'd implement icomparable
on class, , use default sorting. however, when this, should careful return 0
when 2 objects equal.
when this, don't need pass parameters sort()
, since objects know how sort themselves.
public ref class linepiece : public icomparable<linepiece^> { public: string^ type; int x, y, x2, y2; string^ text; virtual int compareto(linepiece^ other) { int result = 0; if (result == 0) result = this->x.compareto(other->x); if (result == 0) result = this->y.compareto(other->y); if (result == 0) result = this->x2.compareto(other->x2); if (result == 0) result = this->y2.compareto(other->y2); if (result == 0) result = this->type->compareto(other->type); if (result == 0) result = this->text->compareto(other->text); return result; } } int main(array<system::string ^> ^args) { list<linepiece^>^ list = ... list->sort(); }
Comments
Post a Comment