View Full Version : sort multi in class
woraprud
21st January 2013, 15:11
Hi everyone,
I have question about sort data in class. i need sort value X and Y
class PointMatch {
public :
int X;
int Y;
QString Name;
};
In list have data before sort :
[2,5,'A']
[1,2,'B']
[1,3,'C']
[2,3,'D']
[1,1,'E']
I need after sort X and Y.
[1,1,'E']
[1,2,'B']
[1,3,'C']
[2,3,'D']
[2,5,'A']
If have sample code. help tell me.
Thank you.
Viper666
21st January 2013, 15:30
there is function which call qSort() (http://doc.qt.digia.com/qt/qtalgorithms.html)
Lesiok
21st January 2013, 15:35
PointMatch class must define operator <() and then you can use the qSort (http://qt-project.org/doc/qt-4.8/qtalgorithms.html#qSort) function
Santosh Reddy
21st January 2013, 15:42
Do you want to use Qt sort algorithms? if Yes then this is one way
#include <QList>
#include <QString>
#include <iostream>
class PointMatch
{
public :
PointMatch(int x, int y, const QString & name) : X(x), Y(y), Name(name) { }
PointMatch(const PointMatch & p) : X(p.X), Y(p.Y), Name(p.Name) { }
int X;
int Y;
QString Name;
};
bool PointMatchLessThan(const PointMatch & p1, const PointMatch & p2)
{
if(p1.X < p2.X)
return true;
else if(p1.X == p2.X)
{
if(p1.Y < p2.Y)
return true;
else
return false;
}
return false;
}
int main()
{
QList<PointMatch> points;
points.append(PointMatch(2, 5, "A"));
points.append(PointMatch(1, 2, "B"));
points.append(PointMatch(1, 3, "C"));
points.append(PointMatch(2, 3, "D"));
points.append(PointMatch(1, 1, "E"));
foreach(PointMatch point, points)
std::cout << "[" << point.X << ", " << point.Y << ", " << point.Name.toStdString() << "]" << std::endl;
qSort(points.begin(), points.end(), PointMatchLessThan);
std::cout << std::endl;
foreach(PointMatch point, points)
std::cout << "[" << point.X << ", " << point.Y << ", " << point.Name.toStdString() << "]" << std::endl;
}
other way is to implement a less than operator for the class
woraprud
22nd January 2013, 01:21
To. Santosh Reddy, Thank you very much. :D
Powered by vBulletin® Version 4.2.5 Copyright © 2024 vBulletin Solutions Inc. All rights reserved.