我在列表中找不到元素
我阅读了有关find函数的文档,其文档对于“ int,string等”数据类型都有好处,但是当我使用类作为
时,window.addEventListener("load",() =>
[...document.querySelectorAll("a[target=_blank]")]
.forEach(lnk => lnk.setAttribute("rel", "noopener noreferrer"))
);
我遇到了一些问题。
list<Person> mylist
结果为:“不匹配'operator =='(操作数类型为'Person'和'const Person')
如何在列表中找到元素?
答案 0 :(得分:2)
C ++并未为您定义==
。您需要告诉它如何比较两个Person
对象的等效性。最直接的方法是提供operator==
class Person {
public:
int kontostand;
string email;
int alter;
Person(int kontostand_, string email_, int alter_)
{
kontostand = kontostand_;
email = email_;
alter = alter_;
}
bool operator==(const Person& other) const
{
return other.kontostand == kontostand &&
other.email == email &&
other.alter == alter;
}
};
另一种选择是使用std::find_if
并提供自己的比较器:
auto x = std::find_if(myPerson.begin(), myPerson.end(), [&Kunde](const Person& other){
return other.kontostand == Kunde.kontostand &&
other.email == Kunde.email &&
other.alter == Kunde.alter;});
答案 1 :(得分:1)
find
尝试通过使用Kunde
比较列表中的元素(还可以如何确定==
是否不在吗?)。 operator==
没有Person
,需要对其进行定义。
class Person {
public:
int kontostand;
string email;
int alter;
Person(int kontostand, string email, int alter) :
kontostand(kontostand),
email(email),
alter(alter)
{}
bool operator==(const Person& other) const {
return (kontostand == other.kontostand)
&& (email == other.email)
&& (alter == other.alter);
}
};
最好使用构造函数的初始化列表。在代码中,memebrs首先被默认初始化,然后分配值。使用初始化程序列表,仅对成员进行初始化。