函数原型
template<class _RanIt> inline void nth_element(_RanIt _First, _RanIt _Nth, _RanIt _Last) template<class _RanIt, class _Pr> inline void nth_element(_RanIt _First, _RanIt _Nth, _RanIt _Last, _Pr _Pred)
nth_element仅排序第n个元素(从0开始索引),即将位置n(从0开始)的元素放在第n大的位置,处理完之后,默认排在它前面的元素都不比它大,排在它后面的元素都不比它小。
[first,nth)中的元素都是不大于array[nth]的,[nth, last)中的元素都是不小于array[nth]的。
关注第n个,只保证小于该值的元素在其左边,大于等于的在其右边,但并不保证其完全有序。
参数
first last 输入容器头、尾
nth 第n个元素
pred 函数指针或函数对象或lambda表达式
#include <iostream> #include <algorithm> #include <functional> #include <vector> #include <string> #include <iterator> #include <array> #include <sstream> int main() { std::vector<int> c{1, 3, 7, 4, 10, 8, 19, 2, 3, 4, 75, 8}; std::nth_element(std::begin(c), std::begin(c) + 5, std::end(c)); std::copy(std::begin(c), std::end(c), std::ostream_iterator<int>(std::cout, "; ")); std::cout << std::endl; return -1; } //输出 1; 2; 3; 3; 4; 4; 7; 8; 8; 10; 19; 75;
#include <iostream> #include <algorithm> #include <functional> #include <vector> #include <string> #include <iterator> #include <array> #include <sstream> int main() { std::vector<int> c{1, 3, 7, 4, 10, 8, 19, 2, 3, 4, 75, 8}; std::nth_element(std::begin(c), std::begin(c) + 5, std::end(c), std::greater<int>()); std::copy(std::begin(c), std::end(c), std::ostream_iterator<int>(std::cout, "; ")); std::cout << std::endl; return -1; } //输出 75; 19; 10; 8; 8; 7; 4; 4; 3; 3; 2; 1;