【发布时间】:2021-07-16 12:09:56
【问题描述】:
所以假设我有一个数组array{12, 10, 10, 9, 8, 8, 8} 按降序排列。
我想在数组末尾按升序对可以除以 2 但不是 4 的数字进行排序,除以 4 的数字在数组开头按降序排序,其余的在中间(没有具体的顺序)。对于我的示例,转换后它应该如下所示:
array{12, 8, 8, 8, 9, 10, 10}。有什么办法可以有效地做到这一点? c++语言。
如有拼写错误,请见谅。
【问题讨论】:
-
使用
std::sort并提供一个 predicate 比较 lambda 来编码您的订购标准。 -
听起来像是
std::sort和std::partition的工作 -
@NathanOliver 我查了 std::partition 但我不明白它应该做什么。
-
它允许您根据某些谓词对数据集进行分区。它会将谓词为真的所有元素移动到数组的前面,并将其余元素留在最后。您可以对数组的前面部分进行排序以获得您想要的顺序。
-
@AdrianHEY
std::partition用于将您的容器一分为二。容器的一侧保存满足特定条件的元素,另一侧保存不满足特定条件的元素。看起来您想先对容器进行两次分区,因为您需要 3 个部分。容器正确分区后,您可以根据分区的要求单独对每个分区进行排序。