struct Room
{
int room;
int x,y;
int dist;
Room(){}Room(int _room,int xx,int yy,int _dist)
{
x = xx;
y = yy;
room = _room;
dist = _dist;
}
bool operator < (const Room& tempRoom)const
{
return dist < tempRoom.dist;
}
};
int main()
{
set<Room>que;
que.insert(Room(0,0,0,1));
que.insert(Room(0,0,0,1));
que.insert(Room(1,2,0,1));
que.insert(Room(0,2,0,1));
for(auto itr = que.begin(); itr != que.end();itr++)
cout<<itr->room<<","<<itr->x<<","<<itr->y<<","<<itr->dist<<endl;
return 0;
}
Es zeigt den Ausgang 0,0,0,1. Aber es sollteKonnte Daten in std :: set nicht einfügen. Als Duplikat verworfen
0,0,0,1
1,2,0,1
0,2,0,1
sein Ich weiß, es ist etwas mit Operatorüberladung zu tun . Ich habe versucht, den Operator == zu überladen. Aber nach der Suche fand ich Set verwendet nur < Operator für jeden Vergleich. Wie ändere ich die überladene <-Funktion, um die obige Ausgabe zu erzielen? Vielen Dank.
Wie wäre es mit in Ihrem 'operator <'? –
CompuChip
Zusätzlich zu den Antworten unten (die mehr oder weniger das Gleiche bedeuten), sollten Sie in Erwägung ziehen, ein separates Vergleichsobjekt für "Räume" zu implementieren - Sie wollen nicht wirklich, dass "room1
CompuChip
@CompuChip: das ist eine schlechte Idee: die Logik, die Sie beschreiben, definiert _nicht_ eine streng schwache Ordnung. Sie müssten etwas nach "Raum