首页 > STL nth_element

STL nth_element

-->

nth_element(first,nth,last)

first,last 第一个和最后一个迭代器,也可以直接用数组的位置。 

nth,要定位的第nn 个元素,能对它进行随机访问.

将第n_thn_th 元素放到它该放的位置上,左边元素都小于它,右边元素都大于它.

测试代码:

http://www.cplusplus.com/reference/algorithm/nth_element/

// nth_element example
#include      // std::cout
#include     // std::nth_element, std::random_shuffle
#include        // std::vectorbool myfunction (int i,int j) { return (i myvector;// set some values:for (int i=1; i<10; i++) myvector.push_back(i);   // 1 2 3 4 5 6 7 8 9std::random_shuffle (myvector.begin(), myvector.end());// using default comparison (operator <):std::nth_element (myvector.begin(), myvector.begin()+3, myvector.end());// using function as compstd::nth_element (myvector.begin(), myvector.begin()+3, myvector.end(),myfunction);// print out content:std::cout << "myvector contains:";for (std::vector::iterator it=myvector.begin(); it!=myvector.end(); ++it)std::cout << ' ' << *it;std::cout << '
';return 0;
}

输出:

myvector contains: 3 1 4 2 5 6 9 7 8

也就是找到第4大的数,但是左右两侧不一定排序

nth_element特别适合找中位数

 std::nth_element(_vec.begin(), _vec.begin() + n - 1, _vec.end());

 

更多相关:

  • 经过长期探索,发现一个不需要手动设置线程休眠时间(e.g. std::this_thread::sleep_for(std::chrono::microseconds(1)))的代码: Github: https://github.com/log4cplus/ThreadPool #ifndef THREAD_POOL_H_7e...

  • c/c++老版本的rand()存在一定的问题,在转换rand随机数的范围,类型或者分布时,常常会引入非随机性。 定义在 中的随机数库通过一组协作类来解决这类问题:随机数引擎 和 随机数分布类 一个给定的随机数发生器一直会生成相同的随机数序列。一个函数如果定义了局部的随机数发生器,应该将(引擎和分布对象)定义为 st...

  • jsoncpp 是一个C++ 语言实现的json库,非常方便得支持C++得各种数据类型到json 以及 json到各种数据类型的转化。 一个json 类型的数据如下: {"code" : 10.01,"files" : "","msg" : "","uploadid" : "UP000000" } 这种数据类型方便我们人阅读以...

  • 问题如下: 已知一组数(其中有重复元素),求这组数可以组成的所有子集中,子 集中的各个元素和为整数target的子集,结果中无重复的子集。 例如: nums[] = [10, 1, 2, 7, 6, 1, 5], target = 8 结果为: [[1, 7], [1, 2, 5], [2, 6], [1, 1, 6]] 同样之前有...

  • 为什么80%的码农都做不了架构师?>>>