我有以下代码:
#include <vector>
using namespace std;
struct Point
{
int x, y;
};
bool Sort(struct Point& a,struct Point& b){
return a.x<b.x;
}
int main(int argc, char *argv[])
{
vector<Point>a;
for (int i=0;i<10;i++){
cin>>a[i].x>>a[i].y;
}
sort(a,10,Sort);
system("PAUSE");
return EXIT_SUCCESS;
}
但似乎错了。你能告诉我使用的排序功能的正确形式吗?
答案 0 :(得分:4)
答案 1 :(得分:3)
您需要为sort函数指定开始和结束迭代器。这可以通过使用a.begin()
和a.end()
函数来完成。
std::sort( a.begin(), a.end(), Sort);
另外, 谓词defn'应该是:
bool Sort(const Point& a,const Point& b) const
{
答案 2 :(得分:2)
您的案例中的另一个解决方案是使用列表而不是向量并重载运算符&lt; :
#include <iostream>
#include <algorithm>
#include <list>
struct Point
{
int x, y;
bool operator<( const Point & p )
{ return this->x < p.x; }
};
void print( Point p )
{
std::cout << "Point (x,y): (" << p.x <<", " << p.y << ")" << std::endl;
}
// just for example
bool Reverse( const Point &p1, const Point &p2 )
{ return p1.x > p2.x; }
int main( )
{
std::list<Point> a;
for( int i = 0; i < 10; ++i)
{
Point p;
std::cin >> p.x >> p.y;
a.push_back( p );
}
a.sort( );
std::for_each( a.begin( ), a.end( ), print );
std::cout << std::endl;
a.sort( Reverse );
std::for_each( a.begin( ), a.end( ), print );
}
std :: list提供链接列表特有的专用算法,例如拼接,排序和就地反转。
答案 3 :(得分:0)
我认为它应该是这样的:
static bool Sort(const Point& a, const Point& b) {
return a.x<b.x;
}
不完全。见评论。
答案 4 :(得分:0)
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
struct Point
{
int x, y;
};
bool PCompare(const struct Point& a, const struct Point& b) {
if(a.y < b.y)
return true;
if(a.y > b.y)
return false;
return a.x<b.x;
}
int main(int argc, char *argv[])
{
vector<Point> a;
for (int i=0;i<10;i++) {
Point p ;
cin>>p.x>>p.y;
a.push_back(p);
}
sort(a.begin(), a.end(), PCompare);
system("PAUSE");
return EXIT_SUCCESS;
}