【发布时间】:2015-08-09 21:36:36
【问题描述】:
STL 提供std::max_element 来查找可迭代对象中的最大元素,例如像这样:
std::vector<float>::const_iterator max =
std::max_element(obj.pt()->begin(), obj.pt()->end());
return std::distance(obj.pt()->begin(), max);
还有什么东西可以获取第 n 个最大元素的迭代器吗?
(请注意,max_element 返回一个迭代器,这实际上很重要:我正在寻找可迭代对象中第 n 个最大元素的位置,而不是值本身。)
【问题讨论】:
-
std::nth_element,虽然它正在修改序列。 -
@dyp 使用
std::sort有什么不同吗? -
不能修改序列。
-
@lcjury,
std::nth_element是 O(n) 而不是 O(n log n)。 -
@fuenfundachtzig,如果你不介意 O(n) 空间,你可以创建一个副本并保持线性时间。不幸的是,这确实意味着另一个潜在的大副本分配。