//STL中list结构体元素排序
#include <list>
using namespace std;
// 结构体定义
typedef struct{
int iNum1;
int iNum2;
int iNum3;
char szContents[8];
}ST_LIST_TEST;
// 比较类
class SortList : less<ST_LIST_TEST>
{
public:
bool operator()(const ST_LIST_TEST& stLeft, const ST_LIST_TEST& stRight) const
{
// 其实这个是重载运算符”()”,具体怎么实现可以根据自己的需要修改
if(stLeft.iNum1 < stRight.iNum1) {
return true;
} else if(stLeft.iNum1 == stRight.iNum1) {
if(stLeft.iNum2 < stRight.iNum2) {
return true;
} else if(stLeft.iNum2 == stRight.iNum2) {
if(stLeft.iNum3 < stRight.iNum3) {
return true;
}
}
}
return false;
}
};
// 主程序
int main(int argc, char *argv[])
{
ST_LIST_TEST stLT;
list<ST_LIST_TEST> lstLT;
list<ST_LIST_TEST>::iterator it;
printf("make list test data start\n");
for(int i = 4; i > 0; i--) {
stLT.iNum1 = i;
for(int j = 3; j > 0; j--) {
stLT.iNum2 = j;
for(int k = 2; k > 0; k--) {
stLT.iNum3 = k;
memset(stLT.szContents, 0, sizeof(stLT.szContents));
sprintf(stLT.szContents, "%d-%d-%d", stLT.iNum1, stLT.iNum2, stLT.iNum3);
lstLT.push_back(stLT);
}
}
}
for(it = lstLT.begin(); it != lstLT.end(); it++) {
printf("[%d][%d][%d][%s]\n", it->iNum1, it->iNum2, it->iNum3, it->szContents);
}
printf("make list test data end\n");
printf("------------------------\n");
printf("sort list test data start\n");
lstLT.sort(SortList());
for(it = lstLT.begin(); it != lstLT.end(); it++) {
printf("[%d][%d][%d][%s]\n", it->iNum1, it->iNum2, it->iNum3, it->szContents);
}
printf("sort list test data start\n");
system("pause");
return 0;
}
参考资料: