У меня есть класс, который имеет list of items
(экземпляр класса с именем ItemList
).
Этот класс ItemList
имеет такие функции, как:
ItemIndexType AddItem(...);
void DoSomething(ItemIndexType index, ...);
ItemIndexType
действует как своего рода «умный итератор» и имеет переменные-члены
myIter (iterator to a multimap in the ItemList)
myList (pointer to the ItemList)
.
И еще несколько используются для домашнего хозяйства.
Это разумно, поскольку, если бы я удалил элемент из ItemList, все индексы, которые указывают на элемент, будут очищены. (указывая на конец карты).
Сейчас он работает так, как задумано, и я больше не буду его сильно менять. Однако для приложения мне нужно сделать что-то дополнительное: я создаю функцию сброса:
void ResetItem(ItemIndexType ind);
Эта функция затем "сбрасывает" элемент ind
, указывающий на исходное значение. Я не хочу хранить значение orignal в классе элемента, поэтому я решил создать контейнер, который будет иметь в качестве ключа itemindex и в качестве значения исходные аргументы, с помощью которых был создан элемент.
Поскольку заказ не только не нужен, но и невозможен, я думаю, что boost :: unordered - это то, что нужно.
Изменение deque, которое я использовал для отслеживания индексов в хэш-таблице, привело к странной ошибке:
X \ boost \ functions \ hash \ extensions.hpp (176): ошибка C2665: 'boost :: hash_value': ни одна из 16 перегрузок не может преобразовать все типы аргументов
Где список создается:
typedef boost::unordered_map<ItemIndexType, ListDataType> ListContType;
Как создать хеш-функцию для пользовательского типа данных?