C++ 如何实现自定义C++;迭代器,有效地迭代由两个不同数组支持的键值对
我想使用libstdc++一次合并四个排序键值对的大序列(以节省内存带宽)。 每个键值对序列由两个不同的数组表示,这样C++ 如何实现自定义C++;迭代器,有效地迭代由两个不同数组支持的键值对,c++,c++11,libstdc++,C++,C++11,Libstdc++,我想使用libstdc++一次合并四个排序键值对的大序列(以节省内存带宽)。 每个键值对序列由两个不同的数组表示,这样 values[i]是与键[i]关联的值 多路合并单个键数组(仅键)或std::pairs数组的实现非常简单。但是,我需要实现一个自定义迭代器,我可以将它传递给多路_合并,它包含一个对我的keys数组的引用和一个对相应的values数组的引用 因此,我的方法如下所示: template< typename KeyT, typename
values[i]
是与键[i]
关联的值
多路合并单个键数组(仅键)或std::pairs数组的实现非常简单。但是,我需要实现一个自定义迭代器,我可以将它传递给多路_合并,它包含一个对我的keys数组的引用和一个对相应的values数组的引用
因此,我的方法如下所示:
template<
typename KeyT,
typename ValueT
>
class ForwardIterator : public std::iterator<std::forward_iterator_tag, KeyT>
{
KeyT* k_itr;
ValueT* v_itr;
size_t offset;
explicit ForwardIterator(KeyT* k_start, ValueT *v_start) : k_itr(k_start), v_itr(v_start), offset(0)
{
}
ForwardIterator& operator++ () // Pre-increment
{
offset++;
return *this;
}
}
模板<
typename键,
类型名值
>
类ForwardIterator:public std::iterator
{
键*k_itr;
值*v_itr;
尺寸偏差;
显式前向迭代器(KeyT*k_start,ValueT*v_start):k_itr(k_start),v_itr(v_start),偏移量(0)
{
}
ForwardIterator和operator++()//预增量
{
offset++;
归还*这个;
}
}
然而,当我开始去引用操作符的重载时,问题就开始了
非常感谢你的帮助!谢谢 您是否在问当您取消引用迭代器时应该返回什么?您看过boost zip迭代器了吗?其次,存在一个问题,根据标准,前向和更强的迭代器必须返回对底层数据的引用,这意味着它必须实际存在。可能需要检查多路合并的确切要求;它需要随机访问迭代器还是前向迭代器,还是只需要输入迭代器?纳萨诺利弗:至少,这就是我被卡住的地方@雅克:恐怕我无法绕过随机访问迭代器。仍然希望有一个合理的解决方案…@elste库需要一个完全随机访问迭代器吗?或者只是大部分?Chrck文档和源代码。