Java tiene esto en forma de un conjunto ordenado. No creo que C++ tenga esto, pero no es tan difícil de implementar. Lo que hicieron los Sun chicos con la clase Java fue extender la tabla hash de modo que cada elemento se insertara simultáneamente en una tabla hash y se mantuviera en una lista de doble enlace. Hay muy poca sobrecarga en esto, especialmente si preasigna los elementos que se utilizan para construir la lista vinculada.
Si estuviera donde usted, escribiría una clase que utilizara un vector privado para almacenar los elementos o implementar una tabla hash en la clase usted mismo. Cuando se va a insertar un elemento en el conjunto, verifique si está en la tabla hash y opcionalmente reemplace el elemento si ese elemento está en él. Luego, busca el elemento anterior en la tabla hash, actualiza la lista para que apunte al elemento nuevo y listo.
Para insertar un nuevo elemento, haga lo mismo, excepto que debe usar un nuevo elemento en la lista; no puede reutilizar los anteriores.
Para eliminar un elemento, puede volver a ordenar la lista para señalarlo y liberar el elemento de la lista.
Tenga en cuenta que debe poder obtener la parte de la lista vinculada donde el elemento que le interesa es directamente del elemento para que no tenga que caminar la cadena cada vez que tenga que moverse o cambiar un elemento.
Si prevé tener muchos de estos elementos cambiados durante la ejecución del programa, es posible que desee mantener una lista de los elementos de la lista, de modo que simplemente pueda tomar el encabezado de esta lista, en lugar de asignar memoria cada vez que tiene que agregar un nuevo elemento.
Es posible que desee ver el algoritmo de enlaces de baile.
La solución de Greg en la pregunta duplicada no parece requerir el contenedor. Gracias por señalarme en la dirección más libre de dolor, sin embargo. –