Ini salah satu caranya.

Triknya adalah gunakan fungsi sort dengan argumen ekstra, yaitu fungsi
untuk  membandingkan dua buah CData. Hal ini diperlukan karena fungsi
sort yang biasa (tanpa argument tambahan) akan membandingkan pointer
dari CData, bukan instancenya.

Hasilnya di bawah ini :

#include <stdlib.h>
#include <stdio.h>
#include <list>

#include <iostream>

class CData
{
public:
       float   m_price;
       long    m_vol;
public:
       CData(float p, long v): m_price(p), m_vol(v){}
       ~CData(){}
};

bool compare_data( const CData* d1, const CData* d2)
{ return d1->m_price < d2->m_price; }

typedef std::list<CData*> data_list_t;

void print_list( data_list_t* t)
{
  if( !t ) return;
  std::list<CData*>::const_iterator iter;
  for (iter= t->begin(); iter != t->end(); iter++)
    std::cout << (*iter)->m_price << "," << (*iter)->m_vol << std::endl;
}

int main()
{
       CData* p1 = new CData(3000.0f, 10);
       CData* p2 = new CData(2000.0f, 10);
       CData* p3 = new CData(4000.0f, 10);

       data_list_t l;
       l.push_back(p1);
       l.push_back(p2);
       l.push_back(p3);

       print_list(&l);
       l.sort( &compare_data );
       print_list(&l);

       delete p1;
       delete p2;
       delete p3;
       return 0;
}

Alternatif lain (yang lebih C++ :-) adalah menggunakan:

class compare_data
{
public:
 bool operator()(const CData* d1, const CData* d2)
 { return d1->m_price < d2->m_price; }
}; 

dan memanggilnya dengan cara:  l.sort( compare_data() );
Mau singkat sedikit? Ganti class-nya dengan struct dan hilangkan
public (karena class+public = struct).

Keuntungan cara ini: compare_data bisa digeneralisasi dengan
menggunakan template dan memanggil fungsi komparasi kelas datanya
sehingga bisa digunakan untuk melakukan sorting dari data dalam bentuk
pointer, sepanjang kelas datanya mengimplementasikan operator <
tentunya.

BTW, lain kali fungsi print_list()-nya diberikan juga dong, supaya
yang mau menjawab/membahas tidak kena kerjaan ekstra membuat dulu
fungsi yang enggak ada :-P


-- 
http://www.google.com/search?q=ariya+hidayat&btnI

--
Berhenti langganan: [EMAIL PROTECTED]
Arsip dan info: http://linux.or.id/milis

Kirim email ke