读书人

vc++ 排序的有关问题

发布时间: 2012-10-13 11:38:17 作者: rapoo

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;} 

读书人网 >C++

热点推荐