与std :: map一样的双向boost转换迭代器

时间:2012-01-09 01:32:53

标签: c++ boost iterator stdmap bidirectional

我正在使用transform_iterator来访问map的密钥(和单独的值)。

但它似乎没有保留std::map::iterator ...

的双向性
#include <map>

#include <iterator>
#include <assert.h>

#include <boost/iterator/transform_iterator.hpp>


typedef std::map<int,int> map;

template <typename Pt>
struct XFunc
{
    typedef typename Pt::first_type result_type;

    result_type& operator()(const Pt &p) { return p.first; }
};
typedef XFunc<map::value_type> xfunc;
typedef boost::transform_iterator<xfunc,map::iterator>  XIt; 

int main(int argc, char* argv[])
{
    map data;

    for (int i = 0; i < 10; ++i )
    {
        map::value_type pt( i, i * 2 );
        data.insert( pt );
    }

    map::iterator itend = data.end();

    map::iterator itlast = itend;
    std::advance(itlast,-1);

    assert(itend != itlast);  // succeeds !

    XIt xend = boost::make_transform_iterator(itend,xfunc());

    XIt xlast = xend;
    std::advance(xlast,-1);

    assert(xend != xlast); // fails !

    return 0;
}

我做错了什么?

0 个答案:

没有答案