C++ 是",==&引用;需要定义运算符才能使用std::find

C++ 是",==&引用;需要定义运算符才能使用std::find,c++,stl,C++,Stl,假设我有: class myClass std::list<myClass> myList 抱怨缺少==运算符 我天真地假设它会对myClass对象的公共成员进行值比较,但我几乎肯定这是不正确的 我假设如果我定义一个==运算符,或者使用一个函子,它将解决这个问题 或者,如果我的列表中保存的是指针而不是值,那么比较就可以了 这是对的还是我应该做些别的事情?编译器不会自动生成默认的运算符==(),因此如果您不自己编写,就无法比较类的对象是否相等 如果您想在公共成员上进行成员级比较,您必

假设我有:

class myClass
std::list<myClass> myList
抱怨缺少==运算符

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

我假设如果我定义一个==运算符,或者使用一个函子,它将解决这个问题

或者,如果我的列表中保存的是指针而不是值,那么比较就可以了


这是对的还是我应该做些别的事情?

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


如果您想在公共成员上进行成员级比较,您必须自己将其实现为
运算符==()
(或“手动”使用单独的函数/functor进行比较)。

Find确实要求该值为,并且编译器不会为您定义默认的
运算符==


或者,您可以使用并提供一个函子谓词。

std::find
需要
操作符==
。即使成员是公开的,也不一定意味着所有成员都与定义平等对这个类意味着什么相关

如果您不想由于某种原因重载运算符(例如,对于该类没有相等的一个直观的含义,实例在某些方面或其他方面可以被认为是相等的),您可以编写一个合适的函数对象,并使用<代码> STD::FIDYIF 。例如:

struct same_surname_as
{
    Person p;
    same_surname_as(const Person& x): p(x) {}
    bool operator()(const Person& person) const { return p.surname == person.surname; }
};

list<Person> li;
find(li.begin(), li.end(), same_surname_as(Person("Pu Songling")); 
结构与姓氏相同
{
人p;
与(constperson&x)同姓:p(x){}
bool操作符()(const Person&Person)const{return p.namite==Person.namite;}
};
李名单;
查找(li.begin(),li.end(),与(人(“蒲松龄”)同名);

如果您的列表包含指针,
std::find
当然会比较指针,而不是值。因此您永远不会找到
&myClassVal
。对,因为它会指向列表中不存在的本地内存。thx。
struct same_surname_as
{
    Person p;
    same_surname_as(const Person& x): p(x) {}
    bool operator()(const Person& person) const { return p.surname == person.surname; }
};

list<Person> li;
find(li.begin(), li.end(), same_surname_as(Person("Pu Songling"));