У Java это есть в виде упорядоченного набора. Я не думаю, что C ++ имеет это, но это не так сложно реализовать самостоятельно. Ребята из Sun сделали с классом Java расширение хеш-таблицы таким образом, чтобы каждый элемент одновременно вставлялся в хеш-таблицу и хранился в двойном связанном списке. В этом очень мало накладных расходов, особенно если вы предварительно выделяете элементы, которые используются для создания связанного списка из.
Если бы я был вами, я бы написал класс, который либо использовал закрытый вектор для хранения элементов, либо реализовывал хеш-таблицу в классе самостоятельно. Когда какой-либо элемент должен быть вставлен в набор, проверьте, находится ли он в хеш-таблице, и при необходимости замените элемент там, если такой элемент есть в нем. Затем найдите старый элемент в хеш-таблице, обновите список, чтобы он указывал на новый элемент, и все готово.
Чтобы вставить новый элемент, вы делаете то же самое, за исключением того, что вы должны использовать новый элемент в списке - вы не можете повторно использовать старые.
Чтобы удалить элемент, вы переупорядочиваете список, чтобы указать вокруг него, и освобождаете элемент списка.
Обратите внимание, что для вас должна быть возможность получить часть связанного списка, в которой интересующий вас элемент находится непосредственно из элемента, чтобы вам не приходилось ходить по цепочке каждый раз, когда вам нужно переместить или изменить элемент.
Если вы ожидаете, что многие из этих элементов будут изменены во время выполнения программы, вы можете сохранить список элементов списка, так что вы можете просто взять верхнюю часть этого списка, а не выделять память каждый раз, когда добавить новый элемент.
Возможно, вы захотите взглянуть на алгоритм танцующих ссылок.