我有一个包含 N 条记录的连续缓冲区,每个 W 字节宽。N 和 W 在编译时都是未知的。N*M 是 500mb 的订单。我想在标准 STL 算法中使用它,例如 sort() 或 nth_element()。我手头有一个比较器。是否有任何已经实施的方法可以做到这一点?
到目前为止,我想出了两种方法:
1)使用一个额外的向量,用索引 0...N 填充,对其进行排序(使用自定义比较器)而不是数据,使其类似于排序顺序的数据记录,然后根据该向量移动数据记录。缺点:额外的内存,修复数据记录顺序的额外困难,这有点不重要。
2)创建一些自定义迭代器(它知道 W),它将返回一些类似于记录的临时“虚拟”类实例,并为该类重载 swap() 以便它交换内存块。缺点:有些棘手,有些脆弱(需要遵循一些 STL 内部机制,例如知道将使用 swap())。