use*_*107 0 c++ overriding class set
这是一个面试问题.
参考示例代码,需要覆盖哪个运算符才能使用
std::set<Value>
#include<iostream>
class Value
{
std::string s_val;
int i_val;
public:
Value(std::string s, int i): s_val(s) , i_val(i){}
};
// EOF
/*
a operator !=
b operator >
c operator <=
d operator >=
e operator <
*/
Run Code Online (Sandbox Code Playgroud)
实际上,我不明白为什么需要在这里覆盖运营商."set"不允许重复的元素,也许运算符!=需要被覆盖?
你不具备覆盖任何运营商,在std::set类模板允许你提供一个比较函数作为模板参数.但是如果你要提供一个运营商,那么需要的是bool operator<().该运算符必须实现严格的弱排序.请参阅此std :: set文档.
使用严格弱排序的原因是因为set是有序容器,通常实现为自平衡二叉树.因此,仅知道两个元素是否相同是不够的.该集必须能够订购它们.并且小于运算符或比较器函子也用于测试元素相等性.