gpt4 book ai didi

c++ - 为什么 lambda 会减慢排序速度

转载 作者:行者123 更新时间:2023-11-28 04:34:27 31 4
gpt4 key购买 nike

为什么 std::sort 使用 lambda 函数时执行速度较慢?没有lambda函数的情况不是用了内部比较函数吗?

#include <random>
#include <algorithm>
#include <iterator>
#include <iostream>
#include <chrono>

using steady_clock = std::chrono::steady_clock;
using time_point = steady_clock::time_point;
using milli = std::chrono::milliseconds;

int main()
{
const int N = 1e7;

std::random_device rnd_device;
std::mt19937 mersenne_engine {rnd_device()};
std::uniform_int_distribution<int> dist {1, N};
auto gen = [&dist, &mersenne_engine](){
return dist(mersenne_engine);
};

std::vector<int> v1(N);
generate(v1.begin(), v1.end(), gen);
std::vector<int> v2;
v2 = v1;

time_point begin, end;

// without lambda
begin = steady_clock::now();
std::sort(v1.begin(), v1.end());
end = steady_clock::now();
std::cout << "elapsed v1 = " << std::chrono::duration_cast<milli>(end - begin).count() <<std::endl;

// with lambda
begin = steady_clock::now();
std::sort(v2.begin(), v2.end(), [](int left, int right){return left < right;});
end = steady_clock::now();
std::cout << "elapsed v2 = " << std::chrono::duration_cast<milli>(end - begin).count() <<std::endl;

return 0;
}

最佳答案

Isn't an internal comparison function used for the case with no lambda function?

不,没有使用内部函数来进行比较。它使用 operator <直接。

来自 cppreference.com :

template< class RandomIt >
void sort( RandomIt first, RandomIt last );

Elements are compared using operator<.

虽然一个好的编译器可能内联函数,但不能保证,特别是在优化未打开的情况下。而std::sort的版本没有函数总是使用 operator < ,即这里不涉及函数调用(显然假设该类型不是重载 operator < 的用户定义类型)。

关于c++ - 为什么 lambda 会减慢排序速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51874991/

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