2016-05-31 19 views
0

Ich verwende oft Standardfunktion in cpp
sort(A.begin(),A.end(),mycmp)Verwendung von Vergleichsoperator im Gegenzug

wo

bool mycmp(int a, int b) 
     return (a>b); 

den Vektor A zu sortieren Wenn aber die Frage ist dann Sortierung maßgeschneiderte fragt oft ich scheine verwirrt und viele Versuche, meine Vergleichsfunktion zu beheben. Kann jemand erklären, was genau return (a>b); bedeutet; Ich lese auch einige Beiträge, kann aber immer noch nicht herausfinden, wie a> b die Reihenfolge zum Absteigen bestimmt.

Beiträge: configure the compare function to work with std::sort


Antwort

0

Sie cmp als Implementierung von weniger als Betreiber < denken kann. Ich benutze lt anders als < nach.

die Frage zu vereinfachen, gehen wir davon aus Blase Art haben:

typedef bool (*cmp)(int, int); 

bool inc(int a, int b) { return a < b; } 
bool dec(int a, int b) { return a > b; } 

void bubble_sort(int a[], int n, cmp lt) { 
    for (int i=0; i<n; ++i) { 
     for (int j=0; j+1<n-i; ++j) { 
      if (lt(a[j+1], a[j])) swap(a[j], a[j+1]); 
     } 
    } 
} 

a[j], a[j+1] Swaps nur, wenn lt(a[j+1],a[j])true ist.

  • wenn wir inc passieren als Funktion zu vergleichen, dann lt(a[j+1],a[j]) ist true bedeutet a[j+1]<a[j], so dass es sortiert zunehmend.
  • Wenn wir dec als Vergleichsfunktion übergeben, dann lt(a[j+1],a[j]) ist true bedeutet a[j+1]>a[j], so dass es abnehmend sortiert.

können Sie sgi sortieren Implementierung um weitere Informationen zu überprüfen.

  1. https://www.sgi.com/tech/stl/sort.html
  2. https://www.sgi.com/tech/stl/download.html
+0

Dank @delta. in Ihrer Antwort können Sie klarstellen, dass welcher Wert von der Dec-Funktion zurückgegeben wird, wenn lt (a [j + 1], a [j]) die richtige ist? Ist es 1? und wenn ja, hilft es, die Reihenfolge zu verringern. – mouse

+0

@mouse ist es 'ture' oder' false' nach Typ Unterschrift. Mit 'sort' müssen Sie definieren, wie die Menge sortiert ist. Wenn Sie keine Menge angeben, wird standardmäßig '<' verwendet. 'cmp' ist nur eine Funktion zum Definieren von' <'. In 'sort' erscheint das Element' x' vor 'y' wenn' lt (x, y) '' true' ist. Ich denke, Sie können etwas diskrete Mathematik lesen, es wird helfen. – delta

Verwandte Themen