是否可以在cpp中创建一组指向对象的指针?

时间:2019-03-05 05:49:46

标签: c++ c++11 data-structures set

在尝试创建一组cpp对象时,我遇到了这个问题

How do i insert objects into STL set  但是我的疑问是,是否有任何方法不将实际对象存储在集合中,而是指向它们的指针,并且仍然能够维护集合的唯一实体属性。

2 个答案:

答案 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);