当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


C++ std::nth_element()用法及代码示例


C++ 的标准库有大量的函数,这些函数没有被探索过,但在特定用法的情况下非常方便。它可以帮助您编写更少的代码并快速完成工作。假设您正在用 C++ 构建一些后端系统,并且已经有数千行。在这种情况下,这些标准库函数对减少代码库大小有很大帮助。同样在提交时间很重要的竞争性编码中,这些类型的函数使用可能会让你开心!

nth_element() 就是这样一个 std 函数,如果列表已排序,它有助于从列表范围中找到第 n 个元素。

例如,

Say the list is:
[4, 1, 2, 3, 6, 7, 5]

如果你想找到 3,使用 nth_element() 函数rdelement(0-indexed) 在整个范围之外,您可能会将列表更新为类似的内容,

[3, 1, 2, 4, 6, 7, 5]

这告诉你 3rd排序列表中的元素将是 arr[3]=4

该函数最重要的特点是:

  1. 它只以正确的顺序给出你的第 n 个元素
  2. 对于元素的其余部分,您无法猜测会是什么安排。这取决于编译器。您可以确定的是,第 n 个元素之前的元素都将小于第 n 个元素,并且第 n 个元素之后的元素大于第 n 个元素。

n-th 元素的语法:

void nth_element(iterator start, iterator nth, iterator end)
// so it doesn't returns anything,
// rather updates the list internally

iterator start  = start of your range
iterator end    = end of your range
iterator nth    = nth term you want to see in position 
                  if the list was sorted (0-indexed)

所以对于上面的例子,向量名称是 arr。那么,它将是:

nth_iterator(arr.begin(),arr+3,arr.end())

由于范围是列表的第一个到最后一个,我们需要找到 3rdelement(0-indexed) 如果列表已排序。

例:

#include <bits/stdc++.h>
using namespace std;

//to print the vector
void print(vector<int> arr)
{
    for (auto it:arr) {
        cout << it << " ";
    }
    cout << endl;
}

int main()
{
    //to see how it's initialized 
    vector<int> arr{ 4, 1, 2, 3, 6, 7, 5 };

    cout << "Printing initially...\n";
    print(arr);

    //find 3rd element if list was sorted
    nth_element(arr.begin(), arr.begin() + 3, arr.end());
    
    cout << "the 3rd element if the list was sorted is:" << arr[3] << endl;

    cout << "the new rearrangement of the array...\n";
    print(arr);
    
    return 0;
}

输出:

Printing initially...
4 1 2 3 6 7 5
the 3rd element if the list was sorted is:4
the new rearrangement of the array...
3 1 2 4 5 6 7

应用或用途:

如果数组是一次性排序的,我们可以在需要查找 nth_element() 时使用这个标准库函数。

一个重要的应用可以是在未排序的数组中查找中位数。



相关用法


注:本文由纯净天空筛选整理自 std::nth_element() in C++。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。