Jak utworzyć kontener map C ++, w którym klucz jest częścią wartości?

Chcę przechowywać kilka obiektów o kluczowej wartości, ale gdzie sam obiekt wartości (i odwołania do niego) zna jego klucz. Chcę także sprawnie wyszukać te obiekty, podając tylko klucz.

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 :: mapWydaje się wymagać, aby pamięć była parą std ::, tak aby wartość nie mogła uzyskać dostępu do klucza. Jeśli wartość zawiera klucz, należy ją zduplikować.W rzeczywistości nie wymusza, aby klucz wewnątrz wartości nie został w jakiś sposób zmienionystd :: setWygląda na naprawdę dobre rozwiązanie, wykorzystując niestandardową metodę porównywania, aby zapewnić unikalność za pomocą klucza, dopóki nie uświadomisz sobie, że cała wartość stała się stała, a nie tylko pole kluczowe.std :: vector (lub inna tablica / lista jak rozwiązania)Może korzystać z wyszukiwania liniowego lub jeśli przedmioty są posortowane wyszukiwanie binarne. Podejrzewam jednak, że nie jest to optymalne pod względem wydajności i potrzebna jest dodatkowa warstwa, aby naprawdę zaimplementować pożądane zachowanie.

questionAnswers(4)

yourAnswerToTheQuestion