typedef struct
{
std::string name;
int id;
int sn;
float kval;
float bias;
PointValue val;
BOOL valChangeFlag;  //判断点的值有没有变化
int param; //用在珠海101规约
float hiOutPut; //用在珠海101规约
float lowOutPut; //用在珠海101规约
} DasPoint;
std::vector<DasPoint*> pointList;
我想根据name进行排序,vector里有自带的排序吗?
如果没有,提供点思路啊,谢谢,帮帮忙

解决方案 »

  1.   

    你用sort排序,指定自己的排序函数即可。
      

  2.   

    本帖最后由 Mackz 于 2009-01-16 12:02:16 编辑
      

  3.   

    以上代码是逆序比较的,正序的话修改一下比较结果判断即可:
    bool MySortFunc(const DasPoint* pItem1, const DasPoint* pItem2)
    {
          assert( pItem1 && pItem2 );
          return ( pItem1->name.compare( pItem2->name ) < 0 );
    }
      

  4.   

    sort函数,自己定义你vector 元素的比较函数,传递进sort作为比较函数
      

  5.   

    或者重载该结构的“<”运算符:
    typedef struct 

        std::string name; 
        int id; 
        int sn; 
        float kval; 
        float bias; 
        PointValue val; 
        BOOL valChangeFlag;  //判断点的值有没有变化 
        int param; //用在珠海101规约 
        float hiOutPut; //用在珠海101规约 
        float lowOutPut; //用在珠海101规约 
        bool operator< (const struct DasPoint& dp)
        {
            return id < dp.id;  // 升序
        }
    } DasPoint; 
    std::vector <DasPoint*> pointList; sort(pointList.begin(), pointList.end());
      

  6.   

    很少看到Mackz 写代码呀.
      

  7.   

    一:自定义operator<
    二:sort(v.begin() , v.end());
      

  8.   

    可以考虑容器里面存的是对象new出来的指针。排序的时候不需要拷贝构造
      

  9.   

    当你的容器中元素时一些标准类型(int float char)或者string时,你可以直接使用这些函数模板。但如果你时自己定义的类型或者你需要按照其他方式排序,你可以有两种方法来达到效果:一种是自己写比较函数。另一种是重载类型的'<'操作赋。 #include <iostream>
    #include <algorithm>
    #include <functional>
    #include <vector>
    using namespace std;class DasPoint
    {
    public:
    std::string name; 
    int id; 
    int sn; 
    float kval; 
    float bias; 
    PointValue val; 
    int param; //用在珠海101规约
    float hiOutPut; //用在珠海101规约
    float lowOutPut; //用在珠海101规约
    BOOL valChangeFlag; //判断点的值有没有变化 bool operator < (const DasPoint &m)const 
    {
    return name < m.name;
    }
    };//自定义排序条件
    bool less_second(const DasPoint & m1, const DasPoint & m2)
    {
            return m1.second < m2.second;
    }int main() 
    {
    vector<DasPoint> vect;
    sort(vect.begin(), vect.end());//使用默认 < 来比较
    sort(vect.begin(), vect.end(), less_second);//使用自定义排序条件排序
    }
      

  10.   

    好像vector里没有自带的排序。