アルゴリズムに到達するまで、多くの STL アルゴリズムをほぼ理解しましたstd::nth_element
。私はそれに行き詰まっています。それがどのように機能するかはわかりませんが、正確に機能します。
教育と理解のために、誰かがアルゴリズムの仕組みを説明してくれませんかstd::nth_element
?
std::vector<int> v{ 9, 3, 6, 2, 1, 7, 8, 5, 4, 0 };
std::nth_element(v.begin(), v.begin() + 2, v.end());
for (auto i : v)
std::cout << i << " ";
std::cout << '\n';
出力:
1 0 2 3 6 7 8 5 4 9
nth
では、要素はどこにあるのでしょうか?- アルゴリズムはどのように、そして何をしますか?
- ある種の部分的なソートを行いますか?
cppreference.com からの説明を次に示します。
nth_element
[first, last) 内の要素を次のように再配置する部分的な並べ替えアルゴリズムです。
- nth が指す要素は、[first, last) がソートされた場合にその位置に出現する要素に変更されます。
- この新しい n 番目の要素の前のすべての要素は、新しい n 番目の要素の後の要素以下です。より形式的には、nth_element は範囲 [first, last) を昇順で部分的にソートし、範囲 [first, nth) 内の任意の i と範囲内の任意の j について
!(*j < *i)
(最初のバージョンまたは2 番目のバージョンの) 条件が満たされるようにします。comp(*j, *i) == false
範囲 [nth, last)。n 番目の位置に配置された要素は、範囲が完全にソートされた場合にこの位置に発生する要素とまったく同じです。nth は終了反復子である場合があり、この場合、関数は効果がありません。
- 私はまだそれについて混乱しています。n番目の要素とは何ですか?また、そのような可能なアルゴリズムを実装する方法は?. 教育のために、多くの STL アルゴリズムを模倣しました。どうもありがとう!