C++:如何检查集合中是否存在具有特定 属性 的对象
C++: How to check that an object with a specific property exists in a set
我有以下结构:
struct dependence {
dependence() {}
dependence(string CUid, LID sink, LID source, std::string var)
: CUid(CUid), sink(sink), source(source), var(var) {}
string CUid;
LID sink = 0;
LID source = 0;
std::string var;
};
现在我想在集合中插入这个结构的对象。我有具有相同 CUid
的对象,但(重要!)其他属性(sink
、source
、var
)可能不同。我想防止在集合中插入具有相同 CUid
的对象。所以我知道的唯一方法是遍历集合并检查 CUid
的每个对象。有没有更好的方法用更少的代码来检查它?
您可以使用自定义比较器来定义对象在集合中的存储顺序。
struct cmp
{
bool operator()(const dependence &a,const dependence &b) const
{
return a.CUid < b.Cuid;
}
};
然后
std::set<dependence,cmp> myset;
现在,如果您尝试插入具有相同 CUid
的对象,只有第一个实例会进入 myset
。
编辑:
另一种方法是重载 <
运算符。
bool operator<(const dependence &a,const dependence &b)
{
return (a.CUid<b.CUid);
}
然后
std::set<dependence> myset;
我有以下结构:
struct dependence {
dependence() {}
dependence(string CUid, LID sink, LID source, std::string var)
: CUid(CUid), sink(sink), source(source), var(var) {}
string CUid;
LID sink = 0;
LID source = 0;
std::string var;
};
现在我想在集合中插入这个结构的对象。我有具有相同 CUid
的对象,但(重要!)其他属性(sink
、source
、var
)可能不同。我想防止在集合中插入具有相同 CUid
的对象。所以我知道的唯一方法是遍历集合并检查 CUid
的每个对象。有没有更好的方法用更少的代码来检查它?
您可以使用自定义比较器来定义对象在集合中的存储顺序。
struct cmp
{
bool operator()(const dependence &a,const dependence &b) const
{
return a.CUid < b.Cuid;
}
};
然后
std::set<dependence,cmp> myset;
现在,如果您尝试插入具有相同 CUid
的对象,只有第一个实例会进入 myset
。
编辑:
另一种方法是重载 <
运算符。
bool operator<(const dependence &a,const dependence &b)
{
return (a.CUid<b.CUid);
}
然后
std::set<dependence> myset;