出于 super 计算模拟的目的,我有一个包含两个大(十亿个元素)std::vector
的结构:一个 std::vector
的“键”( 64 位整数)和一个 std::vector
的“值”。我不能使用 std::map
,因为在我考虑的模拟中, vector 比 std::map
优化得多。此外,由于单独的 vector 提供了一些优化和缓存效率,我不能使用成对的 vector 。而且我不能使用任何额外的内存。
那么,考虑到这些限制,通过增加键的值来对两个 vector 进行排序的最优化方法是什么? (欢迎使用模板元编程和疯狂的编译时技巧)
最佳答案
我脑海中浮现出两个想法:
采用快速排序实现并将其应用于“键” vector ;但修改代码,使其每次对键 vector 进行交换时,也会对值 vector 执行相同的交换。
或者,也许更符合 C++ 的精神,编写一个自定义“包装器”迭代器,它同时迭代两个 vector (在取消引用时返回
std::pair
)。也许 Boost 有一个?然后,您可以将它与std::sort
和一个只考虑“键”的自定义比较函数结合起来。
编辑:
作为一名 C 程序员,我在过去的生活中使用了这里的第一个建议来解决类似的问题。由于显而易见的原因,这远非理想,但它可能是让事情顺利进行的最快方法。
我还没有用 std::sort
尝试过这样的包装器迭代器,但是评论中的 TemplateRex 说它行不通,我很乐意在这方面听从他的意见.
关于c++ - 同时对两个 vector (键/值)进行排序的最快方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21251492/