Можно ли создать набор указателей на объекты в cpp? - PullRequest
0 голосов
/ 05 марта 2019

При попытке создать набор объектов cpp я натолкнулся на этот вопрос

Как вставить объекты в набор STL Но я сомневаюсь, что есть ли способ нехранить фактические объекты в наборе, но указатели на них и при этом иметь возможность поддерживать уникальное свойство сущности набора.

Ответы [ 2 ]

0 голосов
/ 05 марта 2019

Вы можете использовать собственный компаратор в 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);
0 голосов
/ 05 марта 2019

Шаблон 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;
...