【发布时间】:2026-01-11 08:45:01
【问题描述】:
我知道这个问题has alreadybeen askeda fewtimes,但是对于简单的情况(其中紧凑性、可读性或用户熟练度是决定因素)提供了不同的答案,我不是确定哪一个是最有效的,因为我担心重复该操作 O(1M) 次。
设置如下:
-
float的两个向量A和B;这无法更改,但可以从A和B创建其他结构。 -
A和B的长度相等,至少为 4,最多为 20(如果这对您有帮助的话)。 -
A需要根据其条目的值按降序排序,而B只需匹配A的排序。
示例:
A = {2,4,3,1} -> {4,3,2,1}
| | | |
B = {1,2,3,4} -> {2,3,1,4}
问题:
这样做的最有效(= 快速 + 节省内存)的方法是什么?
【问题讨论】:
-
“快速 + 节省内存”往往是相互排斥的。你需要选择你真正关心的。最重要的是 - 你尝试过什么,为什么你认为它还不够好?
-
它必须是两个向量吗,或者你可以有一个带有A和B字段的结构向量和
-
因为向量的长度为 4 且最多为 20,所以我认为处理您的特别小的情况的手工编码算法将是获得您想要的东西的最佳方式。
-
在不重新编码排序算法的情况下执行此操作的一种有趣方法可能是使用某种 zip_iterator 并使用比较函子 (x,y) RandomAccessIterator 的确切要求(主要是因为 iterator_traits::reference 不是真正的引用,这是 ForwardIterator 所要求的,这是由 RandomAccessIterator 暗示的)。但我想你还是可以试试 boost 的 zip_iterator。
标签: c++ performance sorting vector