C++ STL算法nth_element(36)

函数原型


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;

上一篇:Vue 前台项目(电商)5


下一篇:css层级选择器理论(为优化尽量减少层级选择器)