如果它存在,我想从stl向量中删除一个对象。
class test
{
vector<Objects> myvector;
public:
test();
removeTest(Objects);
}
test::removeTest(Objects aObject)
{
myvector.erase(remove(myvector.begin(), myvector.end(), aTest),myvector.end());
}
但是,每当我尝试编译时,我都会收到以下错误:
no match for 'operator=='
只有通过“对象”类型的对象向量使用迭代器时才会出现这种情况。我可以让它适用于寻找整数然后删除它的情况。
任何人都知道我为什么会收到这些错误?我是否使用正确的方法通过值从stl矢量对象中删除对象?
答案 0 :(得分:1)
不匹配'operator =='
错误说明了一切。您需要为Object
类提供相等比较,std::remove
无法知道如何比较您的对象以确定哪些需要删除。
例如:
struct Object {
int i;
std::string s;
bool operator==(const Object& rhs) const {
return i == rhs.i && s == rhs.s;
}
};
它适用于整数,因为整数之间的相等比较是内置的。用户定义的类型不是这样。
有了这个,这个:
void test::removeTest(const Object& aObject)
// ^^^^ ^^^^^^^^^^^^^
{
myvector.erase(
remove(myvector.begin(), myvector.end(), aObject),
// ^^^^^^^
myvector.end()
);
}
应该完全按照自己的意愿行事。请注意,您缺少removeTest
的返回类型(我假设您需要void
)并且您应该通过引用来获取要删除的对象,以避免不必要的副本。 / p>