Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何实现自定义C++;迭代器,有效地迭代由两个不同数组支持的键值对_C++_C++11_Libstdc++ - Fatal编程技术网

C++ 如何实现自定义C++;迭代器,有效地迭代由两个不同数组支持的键值对

C++ 如何实现自定义C++;迭代器,有效地迭代由两个不同数组支持的键值对,c++,c++11,libstdc++,C++,C++11,Libstdc++,我想使用libstdc++一次合并四个排序键值对的大序列(以节省内存带宽)。 每个键值对序列由两个不同的数组表示,这样 values[i]是与键[i]关联的值 多路合并单个键数组(仅键)或std::pairs数组的实现非常简单。但是,我需要实现一个自定义迭代器,我可以将它传递给多路_合并,它包含一个对我的keys数组的引用和一个对相应的values数组的引用 因此,我的方法如下所示: template< typename KeyT, typename

我想使用libstdc++一次合并四个排序键值对的序列(以节省内存带宽)。 每个键值对序列由两个不同的数组表示,这样
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文档和源代码。