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

请帮忙看看这个vector容器如何排序

2012-02-15 
请帮忙看看这个vector容器怎么排序?程序中的 mypoint 是一个点的坐标,我想对其中的y值排序,结果出错,请

请帮忙看看这个vector容器怎么排序?
程序中的 "mypoint "是一个点的坐标,我想对其中的y值排序,结果出错,请问要怎样排序,是

不是要换个容器?编译器devc++4.9.9.2。谢谢!
#include   <iostream>
#include   <vector>
#include   <windows.h>
#include   <algorithm>

using   namespace   std;

int   main()
{
        static   const   int   NUM=10;
        POINT   mypoint[NUM];
        int   i   =   0;
        vector <POINT>   vec;
        for(i=0;i <NUM;i++)
        {
                  mypoint[i].x   =   i;
                  mypoint[i].y   =   NUM-i;
        }
        for(i=0;i <NUM;i++)
        {
                  vec.push_back(mypoint[i]);
        }
        /*以下这行出错:
            23   D:\program\code\vecter.cpp   'class   __gnu_cxx::__normal_iterator <POINT*,  

std::vector <POINT,   std::allocator <POINT>   >   > '   has   no   member   named   'y '  
            23   D:\program\code\vecter.cpp   'class   __gnu_cxx::__normal_iterator <POINT*,  

std::vector <POINT,   std::allocator <POINT>   >   > '   has   no   member   named   'y '  
        */
        sort(vec.begin().y,vec.begin().y);
        for(i=0;i <NUM;i++)
        {
                  cout < <i < < "x= " < <vec.at(i).x < < "   " < <i < < "y= " < <vec.at(i).y < <endl;
        }
        system( "pause ");
        return   0;
}


[解决办法]
因为你的POINT类型不支持 <
方法:1,推荐使用map适合你的程序
2,编写一个函数对象,使用sort(it1,it2,functionObj)
[解决办法]
你想只根据y字段排序?
bool LESS(const POINT & p1, const POINT & p2){return p1.y < p2.y;}
sort(vec.begin(), vec.end(), LESS);
[解决办法]
class lessthan
{
public:
bool operator(){const POINT& lhs, const POINT& rhs}
{
return lhs.y < rhs.y;
}
}

int main()
{
//...
sort(vec.begin(), vec.end(), lessthan());
//...
}

热点排行