Danas ćemo malo razgovarati o komparatorima. Komparatore korisitmo kada želimo uspoređivati određene strukture podataka koje imaju više zasebnih djelova u svojoj strukturi. Znači ako imamo proizvod koji ima cijenu,težinu i datum proizvodnje onda program ne zna kako to treba sortirati. Onda moramo napraviti bool funkciju koja prima 2 argumenta i vraća true ako je prvi manji od drugog. To možemo na najlakši način napraviti pomoću nekoliko if-ova, ali se može pomoću vračanja vrijednosti logičkih vrijednosti. Evo jedan primjer sa sortiranjem koordinata(po x, a onda po y).
struct koord
{
int x;
int y;
}
bool cmp(koord A,koord B)
{
if(A.x==B.x)return A.y<B.y;
else return A.x<B.x;
}
Ukoliko koordinate imaju isti x koordinate onda ih sortiraj po y koordinati.
Primjer 2.(želimo sortirati u obrnutom redosljedu int-ove)
bool cmp(int a,int b)
{
return a>b;
}
//inače te dodatne opcije u našem sortiranju se dodaju kao treći argument u funkciji sort. sort(niz,niz+n,cmp);
Ukoliko smo željeli sortirati u rastučem redoslijedu onda samo u vračanju vrijednosti logičkih vrijednosti promijeniš > u <. Ukoliko ima još nekih pitanja slobodno se javite.
C++0x Komparatori više nisu u modi. Ja više volim lambde:
OdgovoriIzbriši#include
#include
using namespace std;
struct coord { int x, y; };
coord arr[] = { {3, 6}, {3, 4}, {1, 1} };
int main()
{
sort(arr, arr+3, [](const coord& a, const coord& b)
{
if (a.x == b.x) return a.y < b.y;
return a.x < b.x;
});
for (auto& a : arr)
cout << a.x << " " << a.y << '\n';
}
Ja više volim overridati operatore, i koristiti strukture iz headera , a za ispisavanje korisim copy() i ostream_iterator
IzbrišiPrrimjer 1. s originalnog posta: http://pastebin.com/pyMxLmRG
Primjer 2. sort(niz, niz+n, greater())
Padajući redoslijed coord-ova: sort(niz, niz+n, greater())
Tvoj primjer, Mislave: http://pastebin.com/1RkfGcTt