I’m having some trouble keeping objects in a vector, and I think I need to do something with the operators.
std::vector<Foo> vec;
Foo a = Foo();
vec.push_back(a);
...
if(std::find(vec.begin(), vec.end(), a) < vec.end()) {
// Found
} else {
// Not found
}
Foo needs operator== to compile, I do this
bool Foo::operator==(const Foo& rhs) {
return this == &rhs;
}
But from what I understand, vec.push_back, is going to make a copy of the Foo object, so my == will return false.
Hence, whenever I get to the searching, it is never found.
What’s the right thing to do here? I’m hoping to avoid switching to a vector of pointers.
Change the implementation of
Foo::operator==to compare the member variables of Foo for equality instead of checking identity. For example:Note that this can also be a
constfunction since it should not modify any member variables and should be usable onconstinstances of Foo.