cSTL中的list容器用sort排序是,如何自定義比較

時間 2021-07-12 17:34:26

1樓:匿名使用者

1、sort函式的原型之一是:

void sort( iterator start, iterator end, comp cmp );

其中cmp可以是自定義的函式,按照您指定的規則用於比較迭代器對應的元素的大小。

那麼這裡的cmp是一個結構體(或者說類)。該類定義了一個呼叫操作符(就是operator()啦),呼叫操作符接受兩個node型別物件為引數,返回一個bool值。

那麼cmp()是什麼呢?它在執行時將建立一個cmp類的臨時物件,使用該臨時物件呼叫operator()來比較兩個node物件的大小。

比如比較node[i]和node[j],那麼cmp()比較它們之間的大小等價於:

cmp ctemp;

temp.operator(node[i], node[j])返回一個bool值。

所以說cmp()等價於一個函式物件。

2、例程:

#include

#include

#include

using namespace std;

bool sort_desc(int a, int b)

bool sort_asc(int a, int b)

void p(int* begin, int* end)

int main()

;sort(a, a + 10, sort_desc);

p(a, a + 10);

sort(a, a + 10, sort_asc);

p(a, a + 10);

sort(a, a + 10, greater());

p(a, a + 10);

sort(a, a + 10, less());

p(a, a + 10);}

如何利用c++/stl vector的sort演算法對元素是自定義型別進行排序

2樓:

自己寫一個比較函式就可以了,作為第三個引數傳到sort函式。

下面有個小例子:

#include

#include

#include

using namespace std;

class aba

};ostream& operator << (ostream& os, const aba& ra)

// 自己寫的比較函式

bool newless(const aba& ra, const aba& rb)

int main()

return 0;

}朋友,請【採納答案】,您的採納是我答題的動力,如果沒有明白,請追問。謝謝。

3樓:

#include

#include

#include

#include //sort函式標頭檔案

using namespace std;

class student

void display() const

};//自定義的比較函式,這裡是對學號進行排序static bool mycompare(const student& a1,const student& a2)

int main()

sort(classone.begin(), classone.end(),mycompare);

cout << "排序後:" << endl;

it = classone.begin();

while (it != classone.end())return 0;}

關於List容器的問題

listlist假設這個是你的list 先迴圈一遍,把符合這個id的object找到。然後用下面這行,得到這個物件的索引。int i int indexof object 返回此列表中首次出現的指定元素的索引。object beforeobject 1 object afterobject 1 in...

VB中的list控制元件是什麼,VB的List1控制元件所有的使用方法

vb的listbox控制元件是用來顯示專案列表的控制元件。listbox 控制元件,listbox 控制元件顯示專案列表,從其中可以選擇一項或多項。如果專案總數超過了可顯示的專案數,就自動在 listbox 控制元件上新增滾動條。使用 additem 或者 removeitem 方法可以新增或者刪除...

C中Dictionary和list的結合問題

6756,其實沒看懂你在問什麼呢 在c 中,關於list和dictionary的說法,正確的是 ac是正確的 dictionary沒有removeat方法。關於b,能返回定義的資料型別,list是不需要轉換的。b是錯誤的,dictonary中。v是object型別。需要型別轉換 acd是正確的 c ...