我有一个自定义类型 A 的对象(一个具有许多成员的类,这些成员是 std::string、向量等,但没有原始指针)。
现在,我有一个 A 对象的列表。
A tmpobj;
std::list<A> temp;
如果我想调用 std::list::remove 函数从列表中删除特定对象 我正在努力
temp.remove(tmpobj)
现在,这是我的问题
我已经有了< operator overloaded. Yet, I think "==" operator needs to be provided. Is this right. One argument can be, we can determine "==" as two calls to '<' operator like
如果(一个< b || b < a) return false else return true;
或者这是否没有完成,因为进行 2 次调用效率低下,或者是否有其他原因。
n3337 23.3.5.5
void remove(const T& value);
template <class Predicate> void remove_if(Predicate pred);
效果:擦除列表迭代器 i 引用的列表中的所有元素,其中满足以下条件 保持:*i == value,pred(*i) != false。仅使迭代器和对已擦除的引用无效 元素。
因此,您需要重载
operator ==
或谓词。
没有默认值
operator==
,所以不用担心。当编译器抱怨你的类没有 operator==
时,实现它 ;-)
如果你的类的所有可能值一起代表一个具有“全序”数学属性的集合,那么你可以用
operator==
来实现 operator<
。它不一定是最有效的方法,但 C++ 不假设它的主要原因是,一般来说,它不假设任何有关不同重载运算符应如何相互关联的信息。并非所有类型都必然表示全序集。无论好坏,C++ 都允许您使用 operator<
来表示偏序。