C++ nth_element 算法的有趣用例是啥?

Posted

技术标签:

【中文标题】C++ nth_element 算法的有趣用例是啥?【英文标题】:What is an interesting use-case for C++ nth_element algorithm?C++ nth_element 算法的有趣用例是什么? 【发布时间】:2019-05-18 19:28:34 【问题描述】:

我发现了很多关于如何使用 C++ STL 的nth_element 算法的问题和答案,但到目前为止我还没有找到任何有趣的用例。特别是,在什么实际用例中我会使用 nth_element 而不是仅仅对整个向量进行排序?

编辑:显然,nth_element 可用于查找数据的中位数或其他百分位数,但它似乎效率低下,因为它修改了向量。

【问题讨论】:

您可以更有效地获得例如 25% 的百分位数。 【参考方案1】:

一个典型的用例是当一个人想要避免对整个集合进行排序时,因为它很大。如果只需要前 n 个,则使用 nth_element 对集合进行分区。然后第一个分区包含前 n 个元素。

【讨论】:

好的,获得前 n 个是一个合理的用例。我对“nth_element”这个名称感到困惑(恕我直言,“top_n”之类的名称会更清楚)。谢谢 如果你找到一个大数据集的第20个,你可以对分区后的第一页结果进行简单的排序。 如果您想要“大数据集的前 20 个元素,已排序”,可以调用:partial_sort【参考方案2】:

您想回答“什么是中位数?”的数据集。不需要对其进行排序,您只需要一个大于 50% 小于 50% 的条目。

【讨论】:

我看到威廉和我有同样的想法;我们穿越了。 我想过,但似乎很奇怪——找到中位数是一个查询,而 nth_element 改变了向量。我真的必须修改向量,才能回答有关它的查询吗? (相比之下,如果我想要向量中的最大元素,我不必对其进行排序 - 我可以使用不会更改向量的max_element)。

以上是关于C++ nth_element 算法的有趣用例是啥?的主要内容,如果未能解决你的问题,请参考以下文章

持久的有序消息代理的用例是啥

bash中noop [:]的用例是啥?

cudaGraphicsGLRegisterImage中cudaGraphicsRegisterFlagsWriteDiscard的用例是啥?

NSURLSessions 后台会话的正确用例是啥?

TypeScript 中的“as const”是啥意思,它的用例是啥?

DataSet Spark 的用例是啥?