C++使用vector按多字段排序。
2011-01-25 15:30
1241 查看
C++当中vector的数据类型是基本类型时,我们利用std::sort很容易排序,当我们的类型是自定义的结构体,并且我们还要实现按多字段排序,我有两种方法:
1.我们通过重载operator方法来实现:
本例子实现了struct中多个字段排序:
2.我们通过函数对象来实现:
程序结果:
=========================
002BBCXX3
001ABCXX1
002ABCXX2
002BBCXX2
result of sorting is :
001ABCXX1
002ABCXX2
002BBCXX2
002BBCXX3
========================
以上是两种实现方法,希望跟大家交流,不对的地方请各位“大虾”指出。
1.我们通过重载operator方法来实现:
本例子实现了struct中多个字段排序:
]#include<iostream> #include<vector> #include<string> #include<algorithm> using namespace std; typedef struct _JOBLOG_READ_INFO { char szSTN[4]; char szLM[4]; char szJSPM[4]; _JOBLOG_READ_INFO() { memset(szSTN,0,4); memset(szLM,0,4); memset(szJSPM,0,4); } //重载处↓ bool operator < (const _JOBLOG_READ_INFO &other) const { if(memcmp(szSTN,other.szSTN,4) < 0) return true; else if(memcmp(szSTN,other.szSTN,4) > 0) return false; if(memcmp(szLM,other.szLM,4) < 0) return true; else if(memcmp(szLM,other.szLM,4) > 0) return false; if(memcmp(szJSPM,other.szJSPM,4) < 0) return true; else return false; } //重载处↑ }JOBLOG_READ_INFO, *LPJOBLOG_READ_INFO; int main() { vector<JOBLOG_READ_INFO> vecJobInfo; vector<JOBLOG_READ_INFO>::iterator iter; JOBLOG_READ_INFO tempVecJobInfo1; JOBLOG_READ_INFO tempVecJobInfo2; JOBLOG_READ_INFO tempVecJobInfo3; JOBLOG_READ_INFO tempVecJobInfo4; //add the value to tempVecJobinfo1 strcpy(tempVecJobInfo1.szSTN,"001"); strcpy(tempVecJobInfo1.szLM,"ABC"); strcpy(tempVecJobInfo1.szJSPM,"XX1"); //add the value to tempVecJobinfo2 strcpy(tempVecJobInfo2.szSTN,"002"); strcpy(tempVecJobInfo2.szLM,"ABC"); strcpy(tempVecJobInfo2.szJSPM,"XX2"); //add the value to tempVecJobinfo3 strcpy(tempVecJobInfo3.szSTN,"002"); strcpy(tempVecJobInfo3.szLM,"BBC"); strcpy(tempVecJobInfo3.szJSPM,"XX3"); //add the value to tempVecJobinfo4 strcpy(tempVecJobInfo4.szSTN,"002"); strcpy(tempVecJobInfo4.szLM,"BBC"); strcpy(tempVecJobInfo4.szJSPM,"XX2"); vecJobInfo.push_back(tempVecJobInfo3); vecJobInfo.push_back(tempVecJobInfo1); vecJobInfo.push_back(tempVecJobInfo2); vecJobInfo.push_back(tempVecJobInfo4); // vector<JOBLOG_READ_INFO>::iterator iter; for(iter = vecJobInfo.begin(); iter != vecJobInfo.end();iter++) { cout << iter->szSTN << iter->szLM << iter->szJSPM << endl; } //调用处↓ sort(vecJobInfo.begin(),vecJobInfo.end()); //调用处↑ cout<<"result of sorting is :"<<endl; for(iter = vecJobInfo.begin(); iter != vecJobInfo.end();iter++) { cout << iter->szSTN << iter->szLM << iter->szJSPM << endl; } return 0; }
2.我们通过函数对象来实现:
// VectorSortDemo.cpp : コンソール アプリケーションのエントリ ポイントを定義します。 // #include<iostream> #include<vector> #include<string> #include<algorithm> using namespace std; typedef struct _JOBLOG_READ_INFO { char szSTN[4]; char szLM[4]; char szJSPM[4]; _JOBLOG_READ_INFO() { memset(szSTN,0,4); memset(szLM,0,4); memset(szJSPM,0,4); } /* bool operator < (const _JOBLOG_READ_INFO &other) const { if(memcmp(szSTN,other.szSTN,4) < 0) return true; else if(memcmp(szSTN,other.szSTN,4) > 0) return false; if(memcmp(szLM,other.szLM,4) < 0) return true; else if(memcmp(szLM,other.szLM,4) > 0) return false; if(memcmp(szJSPM,other.szJSPM,4) < 0) return true; else return false; }*/ }JOBLOG_READ_INFO, *LPJOBLOG_READ_INFO; //判断标准的定义↓ bool stdSort(const JOBLOG_READ_INFO& jobLogInfo1, const JOBLOG_READ_INFO& jobLogInfo2) { if(memcmp(jobLogInfo1.szSTN, jobLogInfo2.szSTN, 4) < 0) return true; else if(memcmp(jobLogInfo1.szSTN, jobLogInfo2.szSTN, 4) > 0) return false; if(memcmp(jobLogInfo1.szLM,jobLogInfo2.szLM, 4) < 0) return true; else if(memcmp(jobLogInfo1.szLM,jobLogInfo2.szLM, 4) > 0) return false; if(memcmp(jobLogInfo1.szJSPM,jobLogInfo2.szJSPM, 4) < 0) return true; else return false; } //判断标准的定义↑ int main() { vector<JOBLOG_READ_INFO> vecJobInfo; vector<JOBLOG_READ_INFO>::iterator iter; JOBLOG_READ_INFO tempVecJobInfo1; JOBLOG_READ_INFO tempVecJobInfo2; JOBLOG_READ_INFO tempVecJobInfo3; JOBLOG_READ_INFO tempVecJobInfo4; //add the value to tempVecJobinfo1 strcpy(tempVecJobInfo1.szSTN,"001"); strcpy(tempVecJobInfo1.szLM,"ABC"); strcpy(tempVecJobInfo1.szJSPM,"XX1"); //add the value to tempVecJobinfo2 strcpy(tempVecJobInfo2.szSTN,"002"); strcpy(tempVecJobInfo2.szLM,"ABC"); strcpy(tempVecJobInfo2.szJSPM,"XX2"); //add the value to tempVecJobinfo3 strcpy(tempVecJobInfo3.szSTN,"002"); strcpy(tempVecJobInfo3.szLM,"BBC"); strcpy(tempVecJobInfo3.szJSPM,"XX3"); //add the value to tempVecJobinfo4 strcpy(tempVecJobInfo4.szSTN,"002"); strcpy(tempVecJobInfo4.szLM,"BBC"); strcpy(tempVecJobInfo4.szJSPM,"XX2"); vecJobInfo.push_back(tempVecJobInfo3); vecJobInfo.push_back(tempVecJobInfo1); vecJobInfo.push_back(tempVecJobInfo2); vecJobInfo.push_back(tempVecJobInfo4); // vector<JOBLOG_READ_INFO>::iterator iter; for(iter = vecJobInfo.begin(); iter != vecJobInfo.end();iter++) { cout << iter->szSTN << iter->szLM << iter->szJSPM << endl; } // sort(vecJobInfo.begin(),vecJobInfo.end()); /*******************调用处↓*******************************/ sort(vecJobInfo.begin(),vecJobInfo.end(),stdSort); /*******************调用处↑******************************/ cout<<"result of sorting is :"<<endl; for(iter = vecJobInfo.begin(); iter != vecJobInfo.end();iter++) { cout << iter->szSTN << iter->szLM << iter->szJSPM << endl; } return 0; }
程序结果:
=========================
002BBCXX3
001ABCXX1
002ABCXX2
002BBCXX2
result of sorting is :
001ABCXX1
002ABCXX2
002BBCXX2
002BBCXX3
========================
以上是两种实现方法,希望跟大家交流,不对的地方请各位“大虾”指出。
相关文章推荐
- C++使用vector按多字段排序。
- c++中vector的pair与make_pair的使用,双关键字排序
- 关于C++中vector和set使用sort方法进行排序
- 实战c++中的vector系列--使用sort算法对vector<unique_ptr<string>>进行排序(sort函数出错“应输入 2 个参数,却提供了 3 个)
- 实战c++中的vector系列--使用sort算法对vector<unique_ptr<string>>进行排序(sort函数“应输入 2 个参数,却提供了 3 个)
- 实战c++中的vector系列--使用sort算法对vector进行排序(对vector<string>排序、使用稳定的排序std::stable_sort())
- C++ vector容器使用 排序
- 实战c++中的vector系列--使用sort算法对vector进行排序(对vector<string>排序、使用稳定的排序std::stable_sort())
- C++ vector容器使用 排序
- C++ vector多字段排序
- C++ 中vector的使用方法
- 使用lucene的多字段排序--回复网友BUFFON
- C++抽象编程——STL(4)——vector中的排序和其他存储方式
- class 之间嵌套使用 c++ 字段 不完全类型
- Woocommerce 分类下的产品如何使用ID号来作为默认排序字段
- 从零开始学习c++之一维、二维数组和vector的简单使用
- (c++)vector map multimap set 的使用
- C++STL中,map/multimap,set/multiset 和vector的排序
- c++ vector使用下标赋值出错
- C++文本查询程序 不要定义类和智能指针管理数据 C++Primer练习12.28 使用vector,map,set容器保存来自文件的数据并生成查询结果