【发布时间】:2019-09-27 15:50:02
【问题描述】:
考虑
- 前 n 个自然数的向量,I, I=[0, 1, ...n-1], n
- 另一个自然向量 S, S[i]
- 具有 m 个元素的 I 的子集,J, 0
是否有一种有效的方式(在 CPU 周期/缓存友好性/内存方面)根据 S(J) 对 J 的元素进行排序?
使用标准算法的 C++ 代码是首选。
例子:
I = [0, 1, 2, 3, 4]
S = [10, 50, 40, 20, 30]
J = [1, 3, 4]
S(J) = [50, 20, 30]
J sorted according to S(J) = [3, 4, 1]
我考虑过使用 std::multimap 来获得“免费”排序,但 std::multimap 背后的机制(分配等)似乎很昂贵。
使用 std::pair 绑定 J 和 S(J) 将允许使用 std::sort。缺点是需要额外的内存和额外的循环来获得最终排序的 J。
我的做法是在手写排序例程中使用 S(J) 作为标准同时对 J 和 S(J) 进行排序。但是,在 2019 年写一个排序函数似乎很尴尬。
这是一个聪明的方法吗?是否可以利用 n
【问题讨论】: