0

我有一个自定义类型 A 的对象(一个具有许多成员的类,这些成员是 std::string、向量等,但没有原始指针)。

现在,我有一个 A 对象列表。

A tmpobj;  
std::list<A> temp;

如果我想调用 std::list::remove 函数从我正在尝试的列表中删除特定对象

temp.remove(tmpobj)

现在,这是我的问题

  1. 我假设我需要重载 == 运算符。如果我不需要以及默认 == 是否有效,请告诉我。我不确定。我知道如果我没有任何基于 STL 的成员,它会起作用
  2. 我已经重载了 < 运算符。然而,我认为需要提供“==”运算符。这是正确的吗。一个参数可以是,我们可以将“==”确定为对 '<' 运算符的两次调用,例如

    if(a < b || b < a) 返回 false 否则返回 true;

或者这没有完成,因为它进行 2 次调用效率低下,还是有任何其他原因。


com_messages 像组件

我想开发一个自定义组件,该组件具有在 joomla 2.5 组件中内置的 com_messages 等选项卡。任何人都可以指导我吗?

我调查了它但没有得到它
http://docs.joomla.org/Developing_a_Model-View-Controller_Component/2.5/Adding_categories

4

2 回答 2

1

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 ==或谓词。

于 2012-08-31T10:54:28.250 回答
1

没有默认值operator==,所以不用担心。当编译器抱怨你的类没有operator==时,实现它;-)

如果您的类的所有可能值一起表示具有“完全有序”的数学属性的集合,那么您可以operator==根据operator<. 它不一定是最有效的方法,但 C++ 不假设它的主要原因是,通常它不假设不同的重载运算符应该如何相互关联。并非所有类型都必须代表全序集。无论好坏,C++ 都允许您使用operator<来表示偏序。

于 2012-08-31T10:55:43.273 回答