Итак, у меня есть код устаревшего кода, который я хотел бы использовать более современные методы. Но я боюсь, что с учетом того, что все разработано, это не вариант. Основная проблема заключается в том, что часто узел имеет более одного списка за раз. Что-то вроде этого:Элемент в нескольких списках
struct T {
T *next_1;
T *prev_1;
T *next_2;
T *prev_2;
int value;
};
это позволяет ядро имеет один объект типа T
быть выделены и вставлены в 2 дважды связанных списков, красиво и эффективно.
Очевидно, что я мог бы просто иметь 2 std::list<T*>
и просто вставлять объект в оба ... но есть одна вещь, которая была бы менее эффективной ... удаление.
Часто код должен «уничтожать» объект типа T
, и это включает удаление элемента из всех списков. Это хорошо, потому что с учетом T*
код может удалить этот объект из всех его списков. С чем-то вроде std::list
мне нужно было бы искать объект для получения итератора, а затем удалить его (я не могу просто пройти мимо итератор, потому что он находится в нескольких списках).
Есть ли хорошее решение C++ - ish для этого, или это способ ручного проката наилучшим образом? У меня такое чувство, что это ответ вручную, но я решил, что спрошу.
повысить бы :: наилегчайшем помощь? – Cogwheel