从std::nth_element的文件有:std :: nth_element是否为包含相同值的范围定义?
template< class RandomIt >
void nth_element(RandomIt first, RandomIt nth, RandomIt last);
部分按升序排序范围[第一,最后),以便在区间[first,第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)'意味着'[nth,last]'中的元素不会少于'[first,nnth]中的元素吗? – Useless
@无用,谢谢,修正。 – soon
感谢您的大胆和编辑cppreference:我对它进行了更多编辑以应用[LWG问题2162](http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-active.html#2163 ) – Cubbi