首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

vc++ 排序的有关问题

2012-10-13 
vc++ 排序的问题我自己定义了一个结构体typedefstructa{intImageIdCStringseriesNum}并且创建了多个结构

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

热点排行