gpt4 book ai didi

c++ - std::sort 中用 lambda 函数指定的比较函数是否返回 bool 类型?

转载 作者:行者123 更新时间:2023-12-05 09:32:31 28 4
gpt4 key购买 nike

我正在阅读这段代码(source):

#include <iostream> 
#include <functional>
#include <algorithm>
using namespace std;

int main() {
int number[] = {3, 5, 1, 6, 9};
auto print = [](int n) { cout << n << " "; };

sort(begin(number), end(number), [](int n1, int n2) { return n2 - n1; });
// result: 9 6 1 5 3
for_each(begin(number), end(number), print);
cout << endl;

sort(begin(number), end(number), [](int n1, int n2) { return n1 - n2; });
// result: 3 5 1 6 9
for_each(begin(number), end(number), print);
cout << endl;

return 0;
}

我对 return n2 - n1;return n1 - n2; 的工作方式感到困惑。

根据 std::sort - cppreference.com ,它说 comp 是一个 bool 类型的函数。在 C++ 中,非零数字始终具有真值(根据 Do negative numbers return false in C/C++? - Stack Overflow )。

因此,上面示例中的 number 内部有不同的项,将始终导致其中两个 lambda 函数返回 true。也就是说,在这种情况下,那些 lambda 函数返回相同的结果。但是结果显示,一个是反序的,一个是原序的。

我该如何解释这个或者我错过了什么?

最佳答案

此处使用的比较函数无效。如果 LHS 在预期的排序顺序中位于 RHS 之前,则传递给 sort() 的函数应该返回 true,否则返回 false(即它应该表现得像“小于”)。这里的 lambda 表达式都不是这样的,因此使用这些函数中的任何一个调用 sort() 都是未定义的行为。

在这两个调用中,sort() 最终都颠倒了给定的顺序。这只是一个意外,是 sort() 恰好在您的系统上实现的方式的意外随机副作用。如果您尝试使用不同的编译器,您可能会得到不同的结果(例如崩溃)。

关于c++ - std::sort 中用 lambda 函数指定的比较函数是否返回 bool 类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67995381/

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