Man kann nur spekulieren, was Ihre wahre Absicht hier ist, also nehme ich an, Sie haben bereits eine Klasse, die Schlüssel und Wert enthält. In diesem Fall ist std :: set mit einem benutzerdefinierten Vergleich möglicherweise eine bessere Wahl als eine std :: map.
Sie müssen dann einen Vergleich bereitstellen, der nur den Schlüsselteil Ihrer Klasse vergleicht, und der Schlüsselteil muss const sein (nicht ändern im Laufe der Zeit), solange das Objekt in der Menge ist. Wie im Kommentar erwähnt, sind die Elemente eines Sets nur als Consts verfügbar. Wenn Sie also den Wert eines solchen Elements ändern wollen, müssen Sie den Schreibzugriff const_cast oder das Member veränderbar deklarieren.
In einer anderen Antwort iain machte einen weiteren sehr guten Vorschlag. Wenn Sie selten in den Container einfügen und meistens auf den Container zugreifen, der nach Elementen sucht, dann ist ein sortierter std :: vector und std :: binary_search eine sehr effektive Alternative zur Menge.
Das Hauptproblem dabei könnte sein, dass set konstante Werte hält, um die Reihenfolge beizubehalten, so dass die CustomPair das zweite Element änderbar haben müsste, und den Vergleich zwingen würde, nur das erste Element zu verwenden. –
@Greg Rogers Danke, fügte der Antwort die Konstanz des Schlüsselteils hinzu. – lothar
Ich weiß nicht, was die Absicht des OP war, aber seine Frage war über die Übergabe von CustomPair <...> als Vorlage Parameter an Std :: Allocator anstelle von Paar <...>. Dies beantwortet die Frage nicht. – Ari