简介
同时排序多个容器的任务向量同时保持其元素间的对应关系是编程中的常见挑战。本文探讨了使用 Boost 库或标准模板库 (STL) 解决此问题的方法。
标准方法
标准方法包括从向量转换为复合数据结构,例如元组或结构。然而,这种方法需要复制数据,效率较低。
Boost 解决方案
Boost 提供了 boost::zip_iterator 和 boost::zip_range 来启用创建并行遍历多个容器的迭代器。然而,这些迭代器是只读的,不是随机访问的,这限制了它们在标准排序算法中的使用。
Range-v3 解决方案
一种解决方案是使用range-v3 库。 view::zip 函数创建一个并行迭代多个容器的视图。此视图允许使用 range::sort 函数进行排序。
#include <range/v3/all.hpp> #include <iostream> int main() { std::vector<int> v1 = {15, 7, 3, 5}; std::vector<int> v2 = {1, 2, 6, 21}; ranges::sort(ranges::view::zip(v1, v2), std::less<>{}, &std::pair<int, int>::first); std::cout << ranges::view::all(v1) << '\n'; std::cout << ranges::view::all(v2) << '\n'; return 0; }
此代码演示了如何同时对两个向量进行排序,同时保持元素对应关系。排序结果将打印到控制台。
未来注意事项
虽然这种方法适用于序列,但将其扩展为支持其他容器类型(例如列表)需要双向和随机访问迭代器。目前,STL 的 std::sort 函数不支持双向迭代器。
以上是如何在 C 中同时有效地对多个向量进行排序,同时保留对应性?的详细内容。更多信息请关注PHP中文网其他相关文章!