std sort的兄弟姐妹

2021-08-10 00:11:56 字數 2233 閱讀 5294

我們在排序的時候,用到的較多的就是sort函式,但是除了sort本身之外,它還有很多兄弟姐妹,用於在特定的環境下實現更專一的功能,效率更高。

partial_sort()

例如對於上百萬的資料量進行排序,想要獲得其中排位前n位的元素,普遍的做法是將所有資料進行排序,然後取前n位,但是當資料量很大的時候,這種方法需要將所有的元素進行排序效率較低,所以就用到了函式partial_sort,其原型為:

void partial_sort (randomaccessiterator first, randomaccessiterator middle,

randomaccessiterator last);

其中排序結果為將first到last之內的元素,其中的first到middle位按序排列,其他位不用管,示例為:

vector

array ;

for(int i =1;i<10;++i) array.push_back(i);

random_shuffle(array.begin(), array.end());

cout

<< "將陣列打亂為:"

<< endl;

for(unsigned

int i =0;icout

<< array[i] << "," ;

cout

<< endl;

cout

<< "partial_sort(引數為(0,3))之後:"

<< endl;

partial_sort(array.begin(), array.begin()+3, array.end());

for(unsigned

int i =0;icout

<< array[i] << "," ;

cout

<< endl;

nth_element()

還有一種情況是,我們只想獲得排名第幾位的元素,這時候就用到函式nth_element了

其函式原型為:

template

void nth_element (randomaccessiterator first, randomaccessiterator nth,

randomaccessiterator last);

此函式在first到last的範圍之內,將第nth個引數按照順序放好,即第nth位為排序後的此位置,而其他元素的順序並不保證按序排列

示例**為:

vector

array ;

for(int i =1;i<10;++i) array.push_back(i);

random_shuffle(array.begin(), array.end());

cout

<< "將陣列打亂為:"

<< endl;

for(unsigned

int i =0;icout

<< array[i] << "," ;

cout

<< endl;

cout

<< "nth_element(引數為第三位)之後:"

<< endl;

nth_element(array.begin(), array.begin()+2, array.end());

for(unsigned

int i =0;icout

<< array[i] << "," ;

cout

<< endl;

partition()

另一種情況,想將所有的資料根據某種規則分成兩部分,此時需要用的函式partition

他的函式原型是:

bidirectionaliterator partition (bidirectionaliterator first,

bidirectionaliterator last, unarypredicate pred);

其中第三個引數pred即為想要區分的標準,此函式的排序結果是將所有pred為正的結果放到數列的前部分,其餘的元素放到數列的後半部分,但是對於前部分和後部分單獨來說是無序的。

示例**為:

bool is_odd (const

int &a)

int main()

jq的爸媽兄弟姐妹

1 jquery 獲取元素 父節點,子節點,兄弟節點 test1 parent 父節點 test1 parents 全部父節點 test1 parents mui content test children 全部子節點 test children test1 test contents 返回 tes...

快取Redis的兄弟姐妹

redis實現icache介面,它的孿生兄弟memorycache,記憶體快取,千萬級吞吐率。各應用強烈建議使用icache介面編碼設計,小資料時使用memorycache實現 資料增大 10萬 以後,改用redis實現,不需要修改業務 問題 1.一條資料多個key怎麼設定比較合理?如果對效能要求不...

31期 兄弟姐妹連

在諮詢學校來之前,劉老師很專業的給介紹了課程,到校的時候,有專門的接待 超溫馨的,接著是上課拉 記憶深刻的是第一次得素質拓展課,學員們的自我介紹,以及那股熱血沸騰,都是帶著夢想過來的,呵呵,氛圍也正是我想要的,最初的夢想,也許就是這樣吧,每個人都該有個自己的夢想,只是之前我並不明白它到底是怎麼的,可...