Сводка вопроса
Учитывая std::vector<T>
, как я могу создать представление , которое предоставляет интерфейс std::vector<std::pair<T, T>>
, где каждая пара состоит из двух последовательных элементов в базовомвектор?
Подробности
Цель состоит в том, чтобы создать несколько абстракций контейнера в одном хранилище, которое является std::vector<T>
.Тип T
является своего рода различимым объединением, как Boost Variant .Требование к памяти дано, в противном случае я бы просто использовал std::vector<std::pair<T, T>>
.Виды хранилища, которые я хотел бы поддержать, - это наборы (уникальные элементы) и таблицы (ассоциативный массив, уникальные ключи).В то время как первое является простым, обеспечивая заданное свойство уникальности, второму требуется обработка ключей и значений.
Для поддержки семантики ассоциативных массивов над std::vector<T>
, в настоящее время я думаю, что лучшим способом было бысоздайте представление вида std::vector<std::pair<T, T>>
, и это представление позволит мне использовать алгоритмы STL для поддержания требуемых свойств.Это звучит как хорошая стратегия?Есть ли другие идеи?
Связанные
Если бы у меня был итератор i , который проходит через каждый четный элемент, и итератор j , который проходит через каждыйВспоминается нечетный элемент, * Boost zip iterator , который позволяет выполнять итерацию в парах (i, j) .Но мой вариант использования немного отличается тем, что у меня нет двух отдельных контейнеров.