gpt4 book ai didi

c++ - 是否可以为通用元素列表创建排序?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:22:55 25 4
gpt4 key购买 nike

是否可以创建一个函数,该函数接受任何可以想象的类型的元素列表并返回一个运算符,该运算符可以充当对元素进行排序的比较器?换句话说,

template typename<T> ??? getComparator ( T a )
{
// ...
}

我把 ??? 放在哪里因为我不确定返回类型是什么。然而,我的想法是,如果我调用

getComparator(int i)

它可能会返回

bool smallerThan(int a, int b) { return (a < b); }

如果我创建了一个自定义对象

struct thingamabob { int i; std::string s; int ***** ptr; }
thingamabob myThing;

我可以喂 myThing进入getComparator它会弄清楚如何创建一个返回类型为 bool 的函数需要两个 myThing 类型的对象并且对于任何 3 个对象都是如此

thingamabob thing1, thing2, thing3; 

thing1 != thing2 && thing2 != thing3 && thing1 != thing3

然后我可以得到一些<这样要么

thing1 <= thing2 && thing2 <= thing3

thing1 <= thing3 && thing3 <= thing2

thing3 <= thing1 && thing1 <= thing2

thing2 <= thing1 && thing1 <= thing3

thing2 <= thing3 && thing3 <= thing1

thing3 <= thing1 && thing1 <= thing2

thing3 <= thing2 && thing2 <= thing3

最佳答案

我很确定您正在寻找 std::less<T> : 这是一个函数对象,它将比较两个 T 类型的对象.

但是,它需要 operator<已定义 - 适用于 int , 但对于 thingamabob - 您必须自己编写该运算符。编译器如何知道你说一个 thingamabob 的意思除非你告诉它,否则它小于另一个?

关于c++ - 是否可以为通用元素列表创建排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30676290/

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