Я поддерживаю класс контейнера с интерфейсом, похожим на std::map
/ std::unordered_map
.
Интерфейс утверждает, что хранит std::pair<const X,Y>
(то есть, что такое value_type
). Однако внутренне реализация хранит отсортированный массив std::pair<X,Y>
.
Текущая реализация использует reinterpret_cast
для реализации итераторов. У меня вопрос, есть ли лучшая альтернатива?
Переход к сохранению массива std::pair<const X,Y>
был бы невозможен, поскольку реализация должна копировать элементы в массиве для реализации вставки и удаления. Один из способов сделать это - использовать std::sort
.
Редактировать: Хотя я полагаю, что reinterpret_cast
вызывает неопределенное поведение (или реализацию, определенную?), Я еще не сталкивался с компилятором, где это не работает - я ничего не волнуюсь?
Текущая реализация разыменования итератора:
template <class K, class M>
std::pair<const K,M>& operator*() {
std::pair<K,M>& result = ...;
return *reinterpret_cast<std::pair<const K,M>*)(&result);
}