gpt4 book ai didi

c++ - 使用排序函数以链式方式对元组 vector 进行排序

转载 作者:行者123 更新时间:2023-12-02 10:03:27 26 4
gpt4 key购买 nike

所以我尝试以下一个值的第一个元素等于当前元组的第二个元素的方式对我的元组列表进行排序。(第一个元组是第一个元素最小的那个)

(x 可以是任何东西)

未分类

3 5 倍

4 6 ×

1 3 x

2 4 倍

5 2 个

已排序

1 3 x

3 5 倍

5 2 个

2 4 倍

4 6 ×

我在自定义排序函数中使用以下函数作为我的第三个参数

bool myCompare(tuple<int,int,int>a,tuple<int,int,int>b){
if(get<1>(a) == get<2>(b)){
return true;
}
return false;
}

但是我的输出没有改变。请帮助我修复该功能或建议我另一种方式。

最佳答案

这不能通过使用带有自定义比较函数的 std::sort 来实现。您的比较功能不会对您的元素建立严格的弱顺序。

std::sort 文档指出比较函数必须满足比较要求。比较要求说该函数必须引入严格的弱排序。

  • https://en.wikipedia.org/wiki/Weak_ordering对于严格弱序的性质
  • 比较需求:https://en.cppreference.com/w/cpp/named_req/Compare

  • 如果对于严格的弱顺序,第一个参数在第二个参数之前,则比较函数必须返回 true。

    例如元组 a=(4, 4, x) 违反了反反性属性 comp(a, a) == false

    或者 a=(4, 6, x) 和 b=(6, 4, y) 违反了不对称性,即如果 comp(a, b) == true 则不是 comp(b, a) == true

    关于c++ - 使用排序函数以链式方式对元组 vector 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61413541/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com