Voraussetzung für die Schlüssel in std :: multimap
Frage
Ich habe eine std :: multimap wo Schlüssel eine benutzerdefinierte Klasse ist. So etwas wie folgt aus:
Class X {
public:
std::string s;
int x;
operator <(const X& other) const { return s < other.s; }
};
std::multimap<X, int> mymap;
Nun würde Ich mag upper_bound verwenden und LOWER_BOUND alle Elemente mit dem gleichen Wert von „s“ iterieren. Muss ich einen anderen Betreiber für X (zum Beispiel: ==) implementieren. Oder es wird richtig wie das funktioniert?
Auch, was soll ich als Argument liefern für upper_bound und lower_bound ? Ich nehme an, ich soll ein Dummy-Objekt mit dem gewünschten Wert „s“?
erstellenLösung
Da class X
der Schlüssel für die multimap ist, um die Parameter upper_bound()
/ lower_bound()
dieser Art sein muss. Wenn class X
eine implizite Konvertierung von std::string
hat (das ist die Art von X::s
ist), dann können Sie, dass als Parameter verwenden / upper_bound()
lower_bound()
.
Der Standardvergleich für multimap ist less<>
die einfach operator <()
nennt -. So dass der einzige Betreiber ist eine Sie benötigt in class X
haben für die multimap arbeiten
Andere Tipps
Sie brauchen nur einen Operator zur Verfügung zu stellen == und <.
upper_bound und lower_bound sind wie jede andere find-Typ-Methode, so dass Sie die gleiche Art von Objekt müssen mit vergleichen - in Ihrem Fall, ein ‚Dummy‘ Objekt mit dem gewünschten Wert von s
. Bearbeiten : Die Kommentare korrekt sind, dass Sie nur Betreiber benötigen Die 2 Überlastungen Sie für alle STL-Container benötigen, sind Operator Natürlich könnte die Frage auch durch die Implementierung eines Vergleichs Funktors in der Karte selbst, nicht unter Berufung auf die Objekte mehr vollständig beantwortet werden. Dies ist oft eine gute Möglichkeit, verschiedene Möglichkeiten der Aufruf find () auf der Karte zu implementieren.