美文网首页
STL | nth_element 的使用

STL | nth_element 的使用

作者: 0与1的邂逅 | 来源:发表于2019-08-27 17:10 被阅读0次

nth_element:

  • 头文件: <algorithm>

  • 对给定范围[first,last)内的元素进行重新布置。nth位置的元素放置的值就是把所有不大于nth的值放到nth前面,把所有不小于nth的值放到nth后面,对给定范围内的元素"排序"。

参数:
  • first、last
    随机访问迭代器,指定了需要重新"排序"的范围,包括first,但不包括last。

  • nth
    随机访问迭代器,指向范围[first,last)内的一个位置,这个位置将放置排序后应该放于此位置的元素。

  • compare
    二元函数, 返回bool值。 表明是否第一个参数应该排序到第二个参数的前面。此函数不应该修改参数值,可以是一个函数指针或函数对象。

返回值:

  • 简单的说,nth_element算法仅排序数组下标为nth的元素(数组下标从0开始)。

  • iarray [first,last) 元素区间,排序后 iarray[nth] 就是第nth+1大的元素(数组下标从0开始)。

  • 要注意的是,区间[first,nth)[nth+1,last) 内的大小顺序还不一定(不能确定是否有序),只能确定iarray[nth]是第nth+1大的元素。

  • 当然 [first,nth) 肯定是不大于 [nth+1,last) 的。


简单测试代码如下:
#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;

int main()
{
    int nth=7;//数组下标:nth>=0 && nth<len
    int iarray[]={5,6,15,89,7,20,1,3,52,63,12,64,47};
    int len=sizeof(iarray)/sizeof(int);
    cout<<"LEN:"<<len<<endl;
    cout<<"Before:\n";
    for(int i=0;i<len;i++)cout<<iarray[i]<<" ";
    cout<<endl;
    nth_element(iarray,iarray+nth,iarray+len);// 排序第 8个元素(nth+1) 
    cout<<"\nAfter:\n";
    for(int i=0;i<len;i++)cout<<iarray[i]<<" ";
    cout<<endl;
    cout<<"7-th:"<<iarray[nth]<<endl;// 输出数组下标为 7的元素(也就是第 8个元素) 
}

要注意的是,此函数只是将第nth大的元素排好了位置,但并没有返回值。所以要知道第nth+1大 的元素 还得自己输出数组下标为nth 的元素,即cout<<iarray[nth]<<endl;

写在最后:

参考资料:

学无止境,奋斗不止。

相关文章

网友评论

      本文标题:STL | nth_element 的使用

      本文链接:https://www.haomeiwen.com/subject/detxkctx.html