vc++ 排序的问题
我自己定义了一个结构体
typedef struct a{
int ImageId;
CString seriesNum;
}
并且创建了多个结构体,存入vector容器中。
现在我要根据 seriesNum,和ImageId排序, 要求seriesNum按升序的同时,ImageID也按升序进行排列
比如这样一组数据
( "a ",1)( "b ",1)( "a ",2)( "b ",2)( "a ",3)( "b ",3)( "b ",4)( "b ",5)( "b ",6)( "a ",4)( "a ",5)
排序后
( "a ",1)( "a ",2)( "a ",3)( "a ",4)( "a ",5)( "b ",1)( "b ",2)( "b ",3)( "b ",4)( "b ",5)( "b ",6)
本人是新手
[解决办法]
std::sort学习一下这个。
[解决办法]
可以用泛型算法尝试一下。
- C/C++ code
#include <iostream>#include <string>#include <vector>#include <algorithm>using namespace std;struct A{ int ImageId; string seriesNum; A(int t = 0, string s = ""):ImageId(t), seriesNum(s){}};bool isSmallerS(const A &a1, const A &a2){ return a1.seriesNum < a2.seriesNum;}bool isSmallerI(const A &a1, const A &a2){ return a1.ImageId < a2.ImageId;}int main(){ vector<A> avec; avec.push_back(A(1, "a")); avec.push_back(A(3, "c")); avec.push_back(A(2, "a")); avec.push_back(A(1, "b")); avec.push_back(A(1, "c")); avec.push_back(A(1, "d")); avec.push_back(A(2, "b")); avec.push_back(A(2, "c")); avec.push_back(A(3, "a")); avec.push_back(A(3, "b")); stable_sort(avec.begin(), avec.end(), isSmallerI); stable_sort(avec.begin(), avec.end(), isSmallerS); for(vector<A>::iterator iter = avec.begin(); iter != avec.end(); ++iter) { cout<<iter->seriesNum<<" "<<iter->ImageId<<endl; } return 0; }
[解决办法]
1,程序
- C/C++ code
#include <algorithm>#include <iostream>#include <cstring>struct Record{ char seriesNum[32]; int ImageId; };bool operator <(Record const& lhs, Record const& rhs){ int res = strcmp(lhs.seriesNum, rhs.seriesNum); if(0 == res) { return lhs.ImageId < rhs.ImageId; } return res < 0;}int main(){ Record records[] = { { "a ",1},{ "b ",1},{ "a ",2},{ "b ",2},{ "a ",3},{ "b ",3},{ "b ",4},{ "b ",5},{ "b ",6},{ "a ",4},{ "a ",5}}; size_t sz = sizeof(records) / sizeof(Record); std::sort(records, records + sz); for(size_t i = 0; i < sz; ++i) { std::cout <<"(\"" <<records[i].seriesNum << "\", " << records[i].ImageId << ") "; } return 0;}