在具有数据类型类的列表中查找元素

时间:2019-06-05 19:56:43

标签: c++

我在列表中找不到元素

我阅读了有关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')

如何在列表中找到元素?

2 个答案:

答案 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;
    }
};

Demo

另一种选择是使用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;});

Demo 2

答案 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首先被默认初始化,然后分配值。使用初始化程序列表,仅对成员进行初始化。