¿Cómo hacer un contenedor de mapa C ++ donde la clave es parte del valor?

Quiero almacenar un montón de objetos de valor-clave, pero donde el objeto de valor en sí (y las referencias a él) conoce su clave. También quiero buscar eficientemente estos objetos con solo la clave.

class SomeObject
{
private:
    //String or integer. int seem cheap enough to duplicate with std::map, but
    //strings seem pretty expensive when there may be thousands of objects in existence.
    //Reference/Pointer to key is fine
    const SomeOtherObject key;
    ...other stuff...
public:
    ...methods, some of which use the key in some way...
};
std :: mapParece requerir que el almacenamiento sea un std :: pair, de modo que el valor no pueda acceder a la clave. Si el valor contiene la clave, necesita ser duplicado.No hace cumplir realmente que la clave dentro del valor no se modifique de alguna manerastd :: setParece una solución realmente buena, utilizando un método de comparación personalizado para proporcionar unicidad por clave, hasta que te des cuenta de que todo tu valor es constante, no solo el campo clave.std :: vector (u otra matriz / lista como soluciones)Puede utilizar la búsqueda lineal, o si los elementos se mantienen ordenados búsqueda binaria. Sin embargo, sospecho que esto no es óptimo en términos de rendimiento, y se necesita una capa adicional de algún tipo para implementar realmente el comportamiento deseado con él.

Respuestas a la pregunta(4)

Su respuesta a la pregunta