排序演算法中 sort 不適用於list,因為list不支援隨機存取 iterator,
但 list 提供了一個成員函式 sort( ),預設是以 operator < 對所有元素排列。
list.sort( ) 是以 operator < 為準則,對所有元素排列,
但此功能僅限於 list 所存放的是可比較的單純數值型別,
如果在 list 中所存放的是 programmer 自行定義的結構(如含有 id 與姓名),
則無法使用此函式去排序,
比較好的解法是重載 operator (此方法可用於 class 中),
如此一來便可以 list 中的結構子成員來排序,
#include
#include
using namespace std;
typedef struct data
{
data(int i, string s)
{
id = i;
str = s;
}
bool operator>(const data &data2) const
{
return (id < data2.id);
}
int id;
string str;
} DATA_T;
listd_list;
int main()
{
d_list.push_back(DATA_T(8, string("q1")));
d_list.push_back(DATA_T(2, string("q2")));
d_list.push_back(DATA_T(3, string("q3")));
cout << "Before sort:" << endl;
for(list::iterator iter = d_list.begin(); iter != d_list.end(); ++iter) {
cout << (*iter).id << " " << (*iter).str << endl;
}
d_list.sort(greater());
cout << "After sort:" << endl;
for(list::iterator iter = d_list.begin(); iter != d_list.end(); ++iter) {
cout << (*iter).id << " " << (*iter).str << endl;
}
return 0;
}
另一方法,只可使用於較單純的程式裡,因為不能用在class中,
加入 code 已被覆蓋,所以還是用上面的方法吧:)
沒有留言:
張貼留言