当前位置: 首页 > 知识库问答 >
问题:

对向量排序中的奇异行为

汪安然
2023-03-14

我正在使用非负整数填充以下向量以解决代码阻塞问题:

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函数有什么问题?

谢谢

共有1个答案

宗政海
2023-03-14

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的默认比较运算符比较第一个和第二个元素。

 类似资料:
  • 问题内容: 因此,在标头的c ++文档中,有一个不错的函数可让您对向量进行排序。我上课。我有一个指向该类()对象的指针向量,并且我想通过不同的参数(例如年龄,姓名长度等)来比较人员。 我已经有返回所需变量的函数,但是我不确定该怎么做。这是c ++参考http://www.cplusplus.com/reference/algorithm/sort/中的排序向量函数的链接。 问题答案: 很简单: 然

  • 我想像下面这样对流进行反向排序,但是编译时错误为。有人能纠正这个吗

  • 问题内容: Python 3.X的功能不能被依赖于排序异质序列,因为大多数对不同类型的是unorderable(数字类型喜欢,,等是一个例外): 相反,没有自然顺序的对象之间的比较是任意的,但在Python 2.x中是一致的,因此可以: 为了复制在Python 3.X的Python 2.x的行为,我写了一个类来用作key参数sorted(),这依赖于这样一个事实是保证只使用低于比较: 用法示例:

  • 我有一个列表我想按升序排序这个列表,但首先是奇数,然后是偶数,就像这样: 无排序功能 我试过这个但我得到一个错误 谢谢你的回应

  • 问题内容: 我在向量的Java API中找不到任何排序功能。 仅用于而不是用于。 我不想编写自己的排序功能,因为我认为Java应该实现此功能。 我正在寻找类似的东西: 问题答案: 根据API文档,仅实现,所以我不预见问题。可能是因为您按照旧的Java 1.0样式声明了才引起您的困惑: 而不是在接口之前声明它(这是一种好习惯): 因此,您可以利用来对集合进行排序,定义默认的订购行为和/或定义外部可控

  • 我有这个列表,我想按保留顺序订购,但我没有在自动完成辅助中找到任何函数 我也尝试过: 但是我有编译错误: