读书人

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

发布时间: 2012-02-15 12:09:44 作者: rapoo

请帮忙看看这个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());
//...
}

读书人网 >C++

热点推荐