繁体   English   中英

对向量进行排序时的奇怪行为

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM