Wie füge ich Objekte in STL-set
Ich versuche, fügen Sie ein Point2D-Objekt in ein Point2D-set, aber ich bin nicht in der Lage, es zu tun, es scheint das set funktioniert für int und char aber nicht für Objekte.
Ich brauche Hilfe zu wissen, wie man Objekte einfügen, in der festgelegt ??? Angenommen, Sie möchten, Sortieren Sie Sie nach aufsteigender Reihenfolge der x-Wert
class Point2D
{
public:
Point2D(int,int);
int getX();
int getY();
void setX(int);
void setY(int);
double getScalarValue();
protected:
int x;
int y;
double distFrOrigin;
void setDistFrOrigin();
};
int main()
{
Point2D abc(2,3);
set<Point2D> P2D;
P2D.insert(abc); //i am getting error here, i don't know why
}
Sie müssen schreiben
können Sie erläutern weiter , sorry ich bin ziemlich neu in c++
Eine Reihe sortiert ist. Wenn nicht, Sortieren Sie Ihre Objekte, dann können Sie nicht setzen Sie in einem Satz. Die Sortierung erfolgt mit
Das nächste mal bitte die Fehlermeldungen die Sie erhalten.
operator<
für Point2D
können Sie erläutern weiter , sorry ich bin ziemlich neu in c++
Eine Reihe sortiert ist. Wenn nicht, Sortieren Sie Ihre Objekte, dann können Sie nicht setzen Sie in einem Satz. Die Sortierung erfolgt mit
operator<
oder ein Benutzer angegeben Prädikat.Das nächste mal bitte die Fehlermeldungen die Sie erhalten.
InformationsquelleAutor Computernerd | 2013-11-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sie implementieren müssen, um die
operator<
überlastung für Ihre Klasse. Zum Beispiel, in Ihrer Klasse, die Sie tun können:Dann, außerhalb Ihrer Klasse:
Bearbeiten: Wie vorgeschlagen, durch den Emeritierten Ninja, Sie können auch implementieren Sie diese als reguläres Mitglied-Funktion innerhalb der Klasse:
Das original-poster sagte, alles, was er/Sie tun musste, um zu Sortieren, basierend auf x obwohl. Wenn std::set sortiert diese Funktion nutzt, ist nicht, was Sie tun werden?
Keine Notwendigkeit zu machen, ein free-Funktion, es kann genauso gut ein Mitglied. Diese Verweise sollten auch const.
Was der OP denkt, dass er tun muss, ist irrelevant. Das set der key-Typ erfüllen müssen, die Strenge Schwache Bestellung und eine Vergleichsfunktion, mit der Auffassung, dass nur
x
ignoriert alle anderen Mitglieder. Ist es streng gültig? Aus der Spitze von meinem Kopf, okay ja wahrscheinlich. Ist es wirklich das, was der OP will? Zweifelhaft. Ist es die richtige Lösung? Nein.Im Ruhestand Ninja, du hast Recht, danke. Helligkeit Rennen im Orbit, du hast natürlich Recht, die für Allgemeine Fälle, aber ich bin noch mit der OP, was er/Sie gefragt, tut mir Leid.
InformationsquelleAutor Carlos Sanchez
std::set<T>
erfordert, dassstd::less<T>
ist bekannt für die Wert-TypT
. Dies ist so, dass es kann, um seine Elemente, die von grundlegender Bedeutung ist, um, wie es intern arbeitet.Beheben dies, indem Sie
bool operator<(const Point2D&, const Point2D&)
mit einer Logik, die Sie wählen, solange es erfüllt die Strenge Schwache Bestellen.Dies ist eine Anforderung der Art, aber sobald Sie dies getan haben, Sie sind gut zu gehen.
InformationsquelleAutor Lightness Races in Orbit
Ich glaube, einen besseren Weg für C++ 11 oder höher, um die Reihenfolge festzulegen, ist die Verwendung von benutzerdefinierten Funktor, da std::set unterstützen.
Können wir sehen, set ist definiert in der header -
<set>
wie diese:Daher, zu vergleichen, basierend auf x Beispiel:
InformationsquelleAutor Pei