我们在 C++14 中进行了异构查找。我想知道为什么 map、set 等的默认比较器没有更改为 less<>。如果没有此更改,普通 C++ 用户将完全错过此功能,并且在 set
最佳答案
考虑:
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/