gpt4 book ai didi

c++ - 如何将 std::find() 与自定义类的 vector 一起使用?

转载 作者:搜寻专家 更新时间:2023-10-30 23:57:48 25 4
gpt4 key购买 nike

为什么以下不起作用?:

MyClass c{};
std::vector<MyClass> myVector;
std::find(myVector.begin(), myVector.end(), c);

这会报错。

error: no match for 'operator==' (operand types are 'MyClass' and 'const MyClass')

但是,如果我对非类数据类型而不是“MyClass”做同样的事情,一切都会正常进行。那么如何使用类正确地做到这一点呢?

最佳答案

std::find 的文档来自 http://www.cplusplus.com/reference/algorithm/find/ :

template <class InputIterator, class T>
InputIterator find (InputIterator first, InputIterator last, const T& val);

查找范围内的值返回指向范围 [first,last) 中比较等于 val 的第一个元素的迭代器。如果没有找到这样的元素,则该函数返回最后一个。

The function uses operator== to compare the individual elements to val.

编译器不会生成默认的 operator==上课。您必须定义它才能使用 std::find使用包含您的类实例的容器。

class A
{
int a;
};

class B
{
bool operator==(const& rhs) const { return this->b == rhs.b;}
int b;
};

void foo()
{
std::vector<A> aList;
A a;
std::find(aList.begin(), aList.end(), a); // NOT OK. A::operator== does not exist.

std::vector<B> bList;
B b;
std::find(bList.begin(), bList.end(), b); // OK. B::operator== exists.
}

关于c++ - 如何将 std::find() 与自定义类的 vector 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23231076/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com