我有一个泛型类Basic:
class Basic
{
public:
Basic(string name): name(name){}
string Name() {return name;}
private:
string name;
};
class Basic2: public Basic
{
public:
Basic(string name, int value): Basic(name),value(value){}
string Name() {return name;}
private:
string name;
int value;
};
class Basic3: public Basic
{
public:
Basic(string name, string value2): Basic(name),value2(value2){}
string Name() {return name;}
private:
string name;
string value2;
};
其他三个类继承自Basic但具有不同的功能(让我们称它们为Basic1,Basic2,Basic3)。
我有一个基本的矢量:vector<Basic*> v
我知道如何在向量中插入元素。但我想检查元素是否存在,只有在不存在的情况下插入元素。我假设我无法比较不同的类型,如Basic1和Basic2与==?检查我想要插入的元素是否存在于向量中的方法是什么? `
答案 0 :(得分:2)
如果要检查给定的Base
实例是否已存在,可以使用std::find()
查找Base*
指针(是的,这是与后代合作):
Base *b = ...;
if (std::find(v.begin(), v.end(), b) == v.end())
v.push_back(b);
如果您想检查给定的Base
内容是否已存在,则可以改为使用std::find_if()
:
struct MatchesBase
{
Base *_b;
MatchesBase(Base *b) : _b(b) {}
bool operator()(const Base *b) const
{
// compare b to _b as needed...
// return true if matches, else false
}
};
Base *b = ...;
if (std::find_if(v.begin(), v.end(), MatchesBase(b)) == v.end())
v.push_back(b);
答案 1 :(得分:-2)