2016-05-02 16 views
-1

Zuvor habe ich operator < überlastet und ich habe eine Struktur sortiert.operator> Überladung funktioniert nicht

Jetzt versuche ich operator > zu überlasten, aber es funktioniert nicht (eigentlich nicht einmal kompilieren). Ich brauche Hilfe, um die Abfragen zu finden.

#include <bits/stdc++.h> 
#include <algorithm> 
using namespace std; 
struct a 
{ 
    int num1; 
    int num2; 
    bool operator > (const a& rhs) const 
    { 
     return num1>rhs.num1; 
    } 
}; 

int main() 
{ 
    a array[1000]; 
    for(int i=0; i<2; i++) 
    { 
     cin>>array[i].num1>>array[i].num2; 
    } 
    sort(array, array+2); 
    for(int i=0; i<2; i++) 
    { 
     cout<<array[i].num1<<" "<<array[i].num2<<endl; 
    } 
} 
+0

'aber ich habe nicht Pflege worked' zu erarbeiten. –

+0

'Bits/stdC++. H' sollte nicht im Benutzercode verwendet werden. Ich denke, es ist ein interner Implementierungsheader. Definieren Sie auch den 'Operator>' als freie Methode. – Jens

Antwort

4

Wenn bei std::sort suchen, können wir sehen, wenn die Überlastung mit 2 Parametern:

1) Elemente verglichen werden Operator <

Dies bedeutet, dass, wenn Ihre benutzerdefinierten Typ tut nicht definieren operator< erhalten Sie einen Compilerfehler. Sie können einen benutzerdefinierten Vergleicher als dritten Parameter verwenden, wenn Sie diesen Operator nicht überladen möchten. Alternativ können Sie nur das Ergebnis Ihrer operator> invertieren:

bool operator < (const a& rhs) const 
{ 
    return !(num1>rhs.num1); 
} 
+0

als ich den Operator überlastet habe ... ich habe nicht viel in Ihrer Antwort .will Sie bitte mehr ausgearbeitet sein –

+0

@leonelshovo Ich kann Ihre Überlastung davon nicht sehen Operator in Ihrem Code. –

+1

@leonel: 'std: sort()' braucht 'operator <' implementiert werden; es kümmert sich nicht um 'operator>'; Wenn Sie eine umgekehrte Sortierung benötigen, können Sie 'operator <' wie von Gill vorgeschlagen implementieren, 'std: sort()' wird sich nicht beschweren, wenn der Operator tatsächlich als 'operator shrike