创建 时std::set,模板参数之一是class Compare,默认为std::less<T>。
现在,即使您没有给出 的专业化std::less<T>,定义T::operator<也足以让 C++“弄清楚”。但是 C++ 并没有解决任何问题,编译器可以。
编译器正在经历一系列我确信都是简单的步骤。那些步骤是什么?
标准库被定义为std::less<T>将使用,operator<除非另有专门。所以如果你不提供专业化,如果类型支持,<那么它会起作用。
来自std::less<T>:
用于执行比较的函数对象。除非专门,否则调用
operator<typeT。
而对于std::less<T>::operator():
可能的实现:
constexpr bool operator()(const T &lhs, const T &rhs) const
{
return lhs < rhs;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
52 次 |
| 最近记录: |