На этот вопрос дан ответ, поэтому ниже следует объяснение того, чего я хотел достичь.
Я хотел создать табличную структуру данных, предназначенную для эффективного доступа к любой записи строки через первичный столбец, который может быть хеширован. Я подумал, что лучший способ сделать это - сохранить вектор двусвязных списков, каждый из которых будет представлять один столбец, и карту, которая будет содержать сопоставления хэшей записей первичного столбца с узлами. Теперь первая ошибка, которую я сделал, заключалась в том, что мне нужно было бы создать собственную реализацию двусвязного списка, чтобы иметь возможность хранить указатели на узлы, хотя фактически стандарт утверждает, что итераторы для std :: list делают не становится недействительным в результате вставки или сплайсинга (см. ответ Ларсмана). Вот некоторый псевдокод, чтобы проиллюстрировать то, что я хотел сделать ранее. Предположим, что существует типовое имя T, представляющее тип записи, и существование dlist и класса узла, как описано ранее.
typedef dlist<T> column_type;
typedef vector<T> row_type;
typedef ptr_unordered_map<int32_t, row_type> hash_type;
shared_ptr<ptr_vector<column_type> > columns;
shared_ptr<hash_type> hashes;
Теперь, прочитав ответ Ларсмана, я узнал, что мне это не понадобится, так как Boost.MultiIndex полностью удовлетворяет все мои потребности. Даже если бы я это сделал, Boost.Intrusive предлагает более эффективные структуры данных для выполнения того, что я описываю.
Спасибо всем, кто заинтересовался вопросом или предложил помощь! Если у вас есть еще вопросы, добавьте еще один комментарий, и я сделаю все возможное, чтобы прояснить этот вопрос.