nth_element原型:
<algorithm>
std::nth_element
default (1) | |
---|---|
custom (2) | |
該函數是對範圍内的元素進行二分排序,以nth為分界點,前面的都比nth小,後面的都比nth大,但是隻是對前半部和後半部都不會嚴格排序。
使用operator進行排序。
适合尋找序列中前N個最大最小值。
也可以用來尋找第N+1小的值(排序後的nth值)。
一個簡單的例子:
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
vector<int> vi{0,1,2,3,4,5,6,7,8,9};
cout<<"at first vi=";
for(int i:vi)
cout<<i<<" ";
cout<<endl;
nth_element(vi.begin(),vi.begin()+5,vi.end());
cout<<"after nth_element(vi.begin(),vi.begin()+5,vi.end());"<<endl;
cout<<"vi=";
for(int i:vi)
cout<<i<<" ";
cout<<endl;
}
運作截圖:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICdzFWRoRXdvN1LclHdpZXYyd2LcBzNvwVZ2x2bzNXak9CX90TQNNkRrFlQKBTSvwFbslmZvwFMwQzLcVmepNHdu9mZvwFVywUNMZTY18CX052bm9CX9UFVOhXSU5keRRkT0UEWjZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39DOwATMxgTMwEjMykDM0EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
可以看到,前半部分都比vi.begin()+5(即位置為6,元素值是5)小,後面都比5大。
再一個測試的例子:
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
vector<int> vi{0,13,4,61,7,50,8};
cout<<"at first vi=";
for(int i:vi)
cout<<i<<" ";
cout<<endl;
nth_element(vi.begin(),vi.begin()+3,vi.end());
cout<<"after nth_element(vi.begin(),vi.begin()+3,vi.end());"<<endl;
cout<<"vi=";
for(int i:vi)
cout<<i<<" ";
cout<<endl;
cout<<"第4小的元素為,vi.begin()+3="<<*(vi.begin()+3)<<endl;
}
運作截圖:
——————————————————————————————————————————————————————————————————
//寫的錯誤或者不好的地方請多多指導,可以在下面留言或者點選左上方郵件位址給我發郵件,指出我的錯誤以及不足,以便我修改,更好的分享給大家,謝謝。
轉載請注明出處:http://blog.csdn.net/qq844352155
author:天下無雙
Email:[email protected]
2014-9-22
于GDUT
——————————————————————————————————————————————————————————————————