Como fazer um contêiner de mapa C ++ onde a chave faz parte do valor?

Eu quero armazenar um monte de objetos de valor-chave, mas onde o próprio objeto de valor (e referências a ele) sabe sua chave. Também quero pesquisar com eficiência esses objetos, recebendo apenas a chave.

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 exigir que o armazenamento seja um std :: pair, de tal forma que o valor não possa acessar a chave. Se o valor contiver a chave, ele precisará ser duplicado.Na verdade, não impõe que a chave dentro do valor não seja alterada de alguma formastd :: setParece uma solução realmente boa, usando um método de comparação personalizada para fornecer exclusividade por chave, até que você perceba que ela fez todo o seu valor constante, não apenas o campo-chave.std :: vector (ou outra matriz / lista como soluções)Pode usar busca linear, ou se os itens são mantidos classificados busca binária. No entanto, suspeito que isso não seja ótimo em termos de desempenho, e uma camada extra de algum tipo é necessária para realmente implementar o comportamento desejado com ela.

questionAnswers(4)

yourAnswerToTheQuestion