[英]strange behavior while sorting vector of pairs
我正在用非负整数填充以下向量来解决代码堵塞问题:
vector<pair<int,pair<int,int> > > v;
以下排序方式提交失败:
sort(v.begin(),v.end(),[](auto a,auto b){
return a.first < b.first;
});
但如果我只是改变排序如下:
sort(v.begin(),v.end());
提交通过。
我用于排序的 lamda function 有什么问题?
谢谢
您的 lambda 仅考虑第一个元素,但显然一对由两个元素组成。 对于您的 lambda 对,具有相同的第一个但不同的第二个元素将被视为相等。 因此,它们在排序后的相对顺序是未指定的。
如果要对数据进行如下排序:
{1, {1, 1}},
{0, {2, 2}},
{1, {3, 3}},
然后第一项和最后一项被认为是相等的,排序可以产生
{0, {2, 2}},
{1, {1, 1}},
{1, {3, 3}},
或者
{0, {2, 2}},
{1, {3, 3}},
{1, {1, 1}},
但是std::pair
的默认比较运算符比较第一个和第二个元素。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.