从 C++14 开始我们有 std::less<void>
在大多数情况下这是透明且更有用的,所以有理由,例如,std::set
还有std::less<Key>
默认情况下作为谓词,而不是 std::less<void>
历史原因除外。
用例:std::set<std::string>::find
与 std::string_view
等
最佳答案
这样做会破坏当前的工作代码。想象一下我有
struct my_type
{
int id;
int bar;
};
namespace std {
template<>
struct less<my_type>
{
bool operator()(my_type const& lhs, my_type const& rhs)
{
return lhs.id < rhs.id; // bar doesn't need to be compared, only need unique id's in the container.
}
};
}
std::set<my_type> foo;
如果std::set
已更改为使用 std::less<void>
那么这段代码将不再编译,因为 my_type
没有 operator <
.
关于c++ - 为什么 C++ 关联容器谓词默认不透明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54135237/