在不复制的情况下对 C 中的压缩容器进行排序
同时对多个向量进行排序而不创建副本提出了独特的挑战。现有的解决方案通常需要将数据复制到元组或结构中,这是低效的。本题探讨了一种优雅的解决方案,利用 C 库的强大功能来实现无需复制的排序。
问题:
目标是以锁步对多个向量进行排序,确保相应的元素保持配对。复制向量是多余且不可取的。
失败的尝试:
虽然 boost::zip_iterator 和 boost::range::algorithm::sort 看起来很有希望,但它们拒绝只读和非随机访问迭代器。
答案:
根据 interjay 的建议,使用“tupleit.hh”标头中的自定义 TupleIteratorType 使我们能够绕过内置迭代器的限制。这使我们能够定义直接作用于压缩向量的自定义排序函数。
这是一个演示:
此代码对向量进行就地排序,而不复制它们。使用自定义迭代器和“排序”函数可以处理所有必要的排列。
未来扩展:
当前解决方案适用于序列容器。要将其扩展到可排序容器(例如列表),需要 RandomAccess 和双向 TupleIterators,以及支持双向迭代器的排序算法。
以上是如何在不复制数据的情况下对C中的多个向量进行排序?的详细内容。更多信息请关注PHP中文网其他相关文章!