當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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++。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。