是否需要将"=="运算符定义为使用std :: find

min*_*nda 2 c++ stl

比方说我有:

class myClass
std::list<myClass> myList
Run Code Online (Sandbox Code Playgroud)

其中myClass没有定义==运算符,只包含公共字段.

在VS2010和VS2005中,以下内容无法编译:

myClass myClassVal = myList.front();
std::find( myList.begin(), myList.end(), myClassVal )
Run Code Online (Sandbox Code Playgroud)

抱怨缺乏==运算符.

我天真地认为它会对myClass对象的公共成员进行值比较,但我几乎肯定这是不正确的.

我假设如果我定义一个==运算符或者可能使用仿函数,它将解决问题.

或者,如果我的列表中包含指针而不是值,则比较可行.

这是正确的还是我应该做别的事?

sth*_*sth 7

编译器不会自动生成默认值operator==(),因此如果您自己不编写默认值,则无法比较类的对象是否相等.

如果你想在公共成员上进行成员比较,你必须自己实现operator==()(或"手动"使用单独的函数/函子来进行比较).


Ste*_*hen 5

Find确实要求值具有可比性,并且编译器不会为您定义默认值operator==.

或者,您可以使用find_if并提供仿函数谓词.