2 4 6 8 10
在这个序列中,我们可以称元素 6 为整个序列中“第 3 小”的元素,并位于第 3 的位置处;同样,元素 8 为整个序列中“第 4 小”的元素,并位于第 4 的位置处。3 4 1 2 5
假设按照升序排序,并通过 nth_element() 函数查找此序列中第 3 小的元素,则最终得到的序列可能为:2 1 3 4 5
显然,nth_element() 函数找到了第 3 小的元素 3 并将其位于第 3 的位置,同时元素 3 之前的所有元素都比该元素小,元素 3 之后的所有元素都比该元素大。<algorithm>
头文件中。因此,如果程序中想使用该函数,就需要提前引入这个头文件:
#include <algorithm>
//排序规则采用默认的升序排序 void nth_element (RandomAccessIterator first, RandomAccessIterator nth, RandomAccessIterator last); //排序规则为自定义的 comp 排序规则 void nth_element (RandomAccessIterator first, RandomAccessIterator nth, RandomAccessIterator last, Compare comp);其中,各个参数的含义如下:
#include <iostream> #include <algorithm> // std::nth_element #include <vector> // std::vector using namespace std; //以普通函数的方式自定义排序规则 bool mycomp1(int i, int j) { return (i > j); } //以函数对象的方式自定义排序规则 class mycomp2 { public: bool operator() (int i, int j) { return (i > j); } }; int main() { std::vector<int> myvector{3,1,2,5,4}; //默认的升序排序作为排序规则 std::nth_element(myvector.begin(), myvector.begin()+2, myvector.end()); cout << "第一次nth_element排序:\n"; for (std::vector<int>::iterator it = myvector.begin(); it != myvector.end(); ++it) { std::cout << *it << ' '; } //自定义的 mycomp2() 或者 mycomp1 降序排序作为排序规则 std::nth_element(myvector.begin(), myvector.begin() + 3, myvector.end(),mycomp1); cout << "\n第二次nth_element排序:\n"; for (std::vector<int>::iterator it = myvector.begin(); it != myvector.end(); ++it) { std::cout << *it << ' '; } return 0; }程序执行结果可能为(不唯一):
第一次nth_element排序:
1 2 3 4 5
第二次nth_element排序:
5 4 3 2 1
本文链接:http://task.lmcjl.com/news/5892.html