Добавление указателей на ключи на карте на картеC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Добавление указателей на ключи на карте на карте

Сообщение Anonymous »

Код: Выделить всё

struct ptr{
const node *ptr;
// refcounting at the map size granularity, rather individual nodes
// using _c to manage when to clear stord pnodes (nid.clear())
// This is better than shared_ptr ref counting where ref counter is maintainer per node allocated.
// (here only one )

static size_t _c;
ptr(const node *_ptr = nullptr) : ptr(_ptr) { if(ptr) _c++; }
ptr(const ptr& rhs) {  ptr = rhs.ptr; if(ptr) _c++;}
ptr(const ptr&& rhs) {  ptr = rhs.ptr; if(ptr) _c++;}
inline operator node() const{
return *ptr;
}
inline const node* operator->() const { return ptr;}
inline ptr& operator=(const ptr& rhs) {
if(!ptr && rhs.ptr != nullptr ) _c++;
ptr = rhs.ptr;
return *this;
}
inline ptr& operator=(const ptr&& rhs) {
if(!ptr && rhs.ptr != nullptr ) _c++;
ptr = rhs.ptr;
return *this;
}
inline bool operatorsecond = ptr(&(r.first->first));
return r.first->second;
}
Приведенный выше код пытается сохранить указатель на ключ на карте как значение ключа на карте.
Можно ли предположить, что указатели на ключ остаются действительными в течение всего времени жизни карты nid до тех пор, пока сам ключ не будет удален или стерт?
Я реализовал это и отметил, что это работает.
Кроме того, я добавил класс ptr, который ref подсчитывает экземпляры узлов на карте с степенью детализации Map.size, а скорее индивидуальной для каждого счетчика ссылок узла (чтобы сэкономить накладные расходы на такое количество счетчиков ссылок, как в дизайнеshared_ptr).< /p>
Я считаю, что этот дизайн обеспечивает лучшую экономию места на необходимом счетчике ссылок.
Единственная проблема, которую я, похоже, не могу решить, заключается в том, что когда вызывается _mp.clear, это, похоже, вызывает сегментацию. вина. Я считаю, что я собрал весь _c++ там, где это необходимо.

Подробнее здесь: https://stackoverflow.com/questions/784 ... map-in-map
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»