首页 > 后端开发 > C++ > 如何在不复制数据的情况下对C中的多个向量进行排序?

如何在不复制数据的情况下对C中的多个向量进行排序?

DDD
发布: 2024-12-05 02:24:09
原创
665 人浏览过

How Can I Sort Multiple Vectors in C   Without Copying Data?

在不复制的情况下对 C 中的压缩容器进行排序

同时对多个向量进行排序而不创建副本提出了独特的挑战。现有的解决方案通常需要将数据复制到元组或结构中,这是低效的。本题探讨了一种优雅的解决方案,利用 C 库的强大功能来实现无需复制的排序。

问题:

目标是以锁步对多个向量进行排序,确保相应的元素保持配对。复制向量是多余且不可取的。

失败的尝试:

虽然 boost::zip_iterator 和 boost::range::algorithm::sort 看起来很有希望,但它们拒绝只读和非随机访问迭代器。

答案:

根据 interjay 的建议,使用“tupleit.hh”标头中的自定义 TupleIteratorType 使我们能够绕过内置迭代器的限制。这使我们能够定义直接作用于压缩向量的自定义排序函数。

这是一个演示:

此代码对向量进行就地排序,而不复制它们。使用自定义迭代器和“排序”函数可以处理所有必要的排列。

未来扩展:

当前解决方案适用于序列容器。要将其扩展到可排序容器(例如列表),需要 RandomAccess 和双向 TupleIterators,以及支持双向迭代器的排序算法。

以上是如何在不复制数据的情况下对C中的多个向量进行排序?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板