динамический вектороподобный контейнер, но чьи элементы сохраняют свои индексы? - PullRequest
0 голосов
/ 12 июня 2010

Все элементы должны иметь фиксированную позицию в массиве после вставки, пока я явно не удалю их оттуда.Есть ли что-то подобное в boost или где-нибудь еще?Спасибо

Ответы [ 3 ]

3 голосов
/ 12 июня 2010

Используйте unordered_map<int, T> или map<int, T>.

Или используйте vector<optional<T>> и установите для удаляемого слота значение none_t вместо фактического удаления.

1 голос
/ 12 июня 2010

Вместо того, чтобы «удалять» элемент, вы хотите установить его значение равным нулю (или некоторый другой эквивалент «нет значения»).Тогда все остается постоянным, как вам нужно.

0 голосов
/ 12 июня 2010

Интересно.Ваша цель состоит в том, чтобы выставить отображение из целых чисел в слоты, где эти слоты могут содержать значение?Или ваша цель - сохранить базовый адрес каждого элемента и базовый адрес начала самого внутреннего массива?Предположительно, у вас есть причина, по которой вам нужно либо положение элементов, либо отображение целочисленных ключей на элементы, которые должны быть сохранены после «удаления» элемента.В чем причина?

Упомянутые выше реализации map<> или vector<> могут не работать, поскольку операции remove, erase, find и т. Д. Будут удалять, переставлять или проверятьцелые числа, которые вы считаете "удаленными".

К сожалению, я думаю, что это может быть случай, когда вам нужно перевернуть свой собственный, используя обертку вокруг vector<optional<T> > или vector<T*>, в зависимости от того, как вы определяете remove.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...