【发布时间】:2019-10-11 07:44:12
【问题描述】:
我在对向量进行排序时遇到问题。我想根据第一个元素(即数字)对向量进行排序。谁能解释我做错了什么以及这 2 个错误意味着什么?
我尝试使用比较功能对它进行排序,没有它,没有任何效果。
struct Point{
int x;
int y;
};
bool compare(int a,int b){
return a < b;
}
int main()
{
int N,Number,x,y;
cin >> N;
vector<pair<int,Point>> p;
for(int i = 0 ; i < N ; i++){
cin >> Number >> x >> y;
pair<int,Point> pom = {Number,{x,y}};
p.push_back(pom);
}
// sort(p.begin(),p.end());
// sort(p.begin().p.end(),compare);
return 0;
}
我有两个错误,但我不知道是什么意思:
1.'operator
|| (!(__y.first
2. constexpr 函数体 'constexpr bool std::operator&, const std::pair<_t1 _t2>&) [with _T1 = int; _T2 = Point]' 不是返回语句
|| (!(__y.first
【问题讨论】:
-
你不需要
ints 的比较器,这已经在语言中提供了。编译器不知道的是如何比较Point类的两个实例。或std::pair<int, Point>的比较器,如果您希望仅在std::sort函数中使用它(而不是提供operator<(Point, Point)供所有人使用) -
Points 没有实现比较运算符,因为没有定义如何比较 Points。
-
另外,您可能希望您的比较运算符返回一个 int,而不是一个布尔值。这不是等于操作或小于操作。如果 a b,则 > 0。
-
@JosephLarson 如果要在
std::sort中使用此函数,则如果元素a应该在元素b之前,则预计返回true,否则返回false。 -
啊。我应该检查一下。
标签: c++ sorting vector std-pair