Wie erstelle ich einen C ++ - Map-Container, in dem der Schlüssel Teil des Werts ist?

Ich möchte eine Reihe von Schlüsselwertobjekten speichern, aber wo das Wertobjekt selbst (und Verweise darauf) seinen Schlüssel kennt. Ich möchte auch diese Objekte mit nur dem Schlüssel effizient nachschlagen.

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 :: mapScheint zu erfordern, dass der Speicher ein std :: pair ist, so dass der Wert nicht auf den Schlüssel zugreifen kann. Wenn der Wert den Schlüssel enthält, muss er dupliziert werden.Erzwingt nicht, dass der Schlüssel im Wert auf irgendeine Weise nicht geändert wirdstd :: setSieht nach einer wirklich guten Lösung aus, bei der mithilfe einer benutzerdefinierten Vergleichsmethode die Eindeutigkeit nach Schlüssel ermittelt wird, bis Sie feststellen, dass der gesamte Wert const und nicht nur das Schlüsselfeld erstellt wurde.std :: vector (oder andere Array- / Listen-ähnliche Lösungen)Kann die lineare Suche verwenden oder wenn die Elemente binär sortiert bleiben. Ich vermute jedoch, dass dies in Bezug auf die Leistung nicht optimal ist, und dass eine zusätzliche Schicht erforderlich ist, um das gewünschte Verhalten wirklich damit zu implementieren.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage