template< class RandomIt >
void nth_element(RandomIt first, RandomIt nth, RandomIt last);
が部分的に最後の、最初の[範囲をソート)の範囲内のすべての の要素となるよう[最初の、n番目のは)それよりも少ないです [n番目、最後の)の範囲です。
私を悩ますものは、より小さく、という単語です。 以下でなければなりません?範囲は、例えば、ある場合のみ:そのような数があるため
#include <algorithm>
#include <vector>
#include <iostream>
int main()
{
std::vector<int> numbers = {3, 2, 2, 2, 1};
auto middlePosition = numbers.begin() + 2;
std::nth_element(numbers.begin(), middlePosition, numbers.end());
for (int x : numbers)
std::cout << x << std::endl;
return 0;
}
アルゴリズムはは、2よりmiddlePosition
以下前両方数字を作ることができません。アルゴリズムは最適ですし、出力は必要に応じてあります:
1
2
2
3
2
私はこのような素晴らしい動作に頼ることができますか?
私の実装(gcc 4.7)はintroselectアルゴリズムを使用しています。残念ながら、私はアルゴリズムの入力に関する要件を見つけることができませんでした。 introselectはすべての値が異なる必要がありますか?
確かに '!(* i> * j)'は[[n番目、最後])の要素を意味しますが、 '[first、nth]'の要素よりも小さくなりませんか? – Useless
@Useless、ありがとうございました。 – soon
大胆でありながらcppreferenceを編集してくれてありがとう:[LWG issue 2162](http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-active.html#2163)を適用するためにさらに編集しました。 ) – Cubbi