如何创建一个模板升序排序函数来接收任何类型的数据(int、char *、custom)?

How can I create a template ascending sort function that takes in any type of data (int, char *, custom)?

提问人:IWantAPassForChristmas 提问时间:10/9/2023 更新时间:10/9/2023 访问量:47

问:

就像标题所描述的一样,我正在尝试创建一个函数,该函数可以按升序对任何数据类型向量进行排序。现在我正在使用的只是一个标准的排序函数:

    for (i = 0; i < n; i++) {
        for (j = i + 1; j < n; j++) {
            if (arr[i] > arr[j]) {
                temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }
    }

我正在尝试修改此代码,以便能够用于 char * 之类的东西。

我已经在我的自定义函数中为“>”和“<”创建了重载运算符,但我意识到默认情况下我无法以比较整数的方式调用它们。我真的不知道接下来该尝试什么,而且似乎无法理解它。我想我需要一个不同的函数,他们的排序函数至少会调用我的自定义数据类型,但我不知道我会在其中放什么以及主排序函数会是什么样子。

我的另一个想法是为整数、char * 和自定义数据类型创建 3 个较小的函数,每个函数将分别在 main 排序函数中调用,但那时我不知道如何使 main 成为模板函数,或者它是否甚至是一个模板函数。

任何建议都值得赞赏。

C++ 排序 模板 C++17

评论

0赞 chrysante 10/9/2023
只要做你已经在做的事情。这应该调用重载的 .但考虑只依赖 ,这至少是标准库的作用。operator>operator<
0赞 Fareanor 10/9/2023
不能重载基本内置类型的运算符。而且你不必这样做。无论如何,您一定不能“使操作员过载 [...]in my custom function“ :函数的主体不是定义重载或任何东西的地方。
1赞 Bob__ 10/9/2023
关于什么是“模板函数”,似乎有点混淆。你能展示一下你写的整个函数(包括它的签名)吗?你知道std::greater吗?您知道如何将函数对象传递给函数模板吗?
0赞 Community 10/9/2023
请提供足够的代码,以便其他人可以更好地理解或重现问题。
1赞 n. m. could be an AI 10/9/2023
用。如果做不到这一点,请复制 的签名,包括任何模板参数,然后从中工作。std::sortstd::sort

答: 暂无答案