在C++中擦除vector中的对象

Hap*_*tal 0 c++ stl vector

我试图从C++中的向量中擦除一个对象,但它给出了一个奇怪的(和长的)错误.我写了这个:

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

class foo
{
    int a;
    public:
    foo(int _a):a(_a){}
};

int main() {
    foo f1(5),f2(10);
    vector<foo> vec = {f1,f2};
    vec.erase(remove(vec.begin(),vec.end(),f1),vec.end()); // remove f1 (error)
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我得到的确切错误就在这里.
另一方面,当我创建一个int向量然后尝试从该向量中删除一个整数时,它工作正常.

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
    vector<int> vec = {5,10};
    vec.erase(remove(vec.begin(),vec.end(),5),vec.end()); // works fine
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我不确定为什么在第一种情况下会出现错误.

Moh*_*ain 5

对于std::removeclass foo应该包含operator ==或你应该明确传递比较函数.对于标准类型(int例如),比较函数由语言定义,因此编译时没有错误.

一个例子operator ==可以是:

class foo
{
    ...
    bool operator ==(const foo &t) const { return t.a == a; }
};
Run Code Online (Sandbox Code Playgroud)