gpt4 book ai didi

c++ - 为什么异构查找比较器不是默认的?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:21:21 24 4
gpt4 key购买 nike

我们在 C++14 中进行了异构查找。我想知道为什么 map、set 等的默认比较器没有更改为 less<>。如果没有此更改,普通 C++ 用户将完全错过此功能,并且在 set 中查找 const char* 时的性能损失仍然存在。我在我公司的代码库中已经多次看到这种模式。甚至 MS 在其 GoingNative 视频中也表明这是一个真正的性能瓶颈。我怀疑代码被破坏是问题所在,但我看不出对于已经在 c++98/11 中运行的代码怎么会发生这种情况

最佳答案

考虑:

struct Foo { bool operator<(const Foo&) const;};
struct Bar { operator Foo() const; };

std::set<Foo> s;
Bar b;
s.find(b);

默认情况下,s使用 std::less<Foo> , 和 s.find()需要 const Foo & ,因此查找构造一个临时的 Foo来自 Bar并将其用于所有比较。

相反,如果s更改为透明比较仿函数 std::less<> , 然后结合异构查找在 find() 中的每个比较将介于 Foo 之间和一个 Bar , 所以每次比较都会构造一个临时的 Foo .这是无声的性能下降。

关于c++ - 为什么异构查找比较器不是默认的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26434414/

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