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