在尝试创建一组cpp对象时,我遇到了这个问题
How do i insert objects into STL set 但是我的疑问是,是否有任何方法不将实际对象存储在集合中,而是指向它们的指针,并且仍然能够维护集合的唯一实体属性。
答案 0 :(得分:1)
set
模板的参数设置为
template<
class Key,
class Compare = std::less<Key>,
class Allocator = std::allocator<Key>
> class set;
要将指针存储为类型T
,但要确保值是唯一的,您只需要提供适当的Compare
仿函数可以通过比较指针的解引用值来比较指针。
例如,对于指向some_type
的指针,我们可以使用类似的内容:
class comparison {
bool operator()(const some_type* lhs, const some_type* rhs) const {
return *lhs < *rhs;
}
};
,然后将集合声明为
std::set<some_type*, comparison> s;
答案 1 :(得分:0)
您可以在std :: set中使用自定义比较器来取消引用对象并进行比较。
bool compare_int(const int*& l, const int*& r) {
return (*l) < (*r);
}
std::set<int*, compare_int> intSet;
int myInt = 5;
int* myIntPtr = &myInt;
inSet.insert(myIntPtr);