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