Не существует абстрактного типа данных со сложностью O (1) для Insert, Erase AND Lookup, который также предоставляет итератор двунаправленного доступа.
Edit:
Это верно для произвольно большого домена. Учитывая достаточно маленький домен, вы можете реализовать набор со сложностью O (1) для Insert, Erase и Lookup и итератор двунаправленного доступа, используя массив и двусвязный список:
std::list::iterator array[MAX_VALUE];
std::list list;
Инициализировать:
for (int i=0;i<MAX_VALUE;i++)
array[i] = list.end();
Вставка:
if (array[value] != list.end())
array[value] = list.insert(value);
Стирание:
if (array[value] != list.end()) {
array[value].erase();
array[value] = list.end();
}
Поиск:
array[value] != list.end()