c++ - 同时对两个 vector (键/值)进行排序的最快方法?

标签 c++ sorting c++11 vector stl

出于 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/

相关文章:

c++ - C++ 中不寻常的 typedef 使用

java - 按行对矩阵进行排序并保留索引

c++ - 将具有默认参数的 lambda 函数复制到变量

c++ - C++如何获取BIOS信息

c++ - 为链接列表建立条目类

c++ - 为什么要在 struct 和 union 上使用 typedef?

Java:棘手的前缀字符串排序(ArrayLists)

java - 按键升序排序 map

C++11/C++03 和 std::vector 线程安全

c++ - 内存代表多长时间?