Fra*_*ank 3 c++ boost iterator
我有一个std::map,我想定义一个返回修改值的迭代器.通常,std::map<int,double>::iterator迭代结束std::pair<int,double>,我想要相同的行为,只需将double值乘以常量.
我尝试过boost::transform_iterator,但它没有编译:
#include <map>
#include <boost/iterator/transform_iterator.hpp>
#include <boost/functional.hpp>
typedef std::map<int,double> Map;
Map m;
m[100] = 2.24;
typedef boost::binder2nd< std::multiplies<double> > Function;
typedef boost::transform_iterator<Function,
Map::value_type*> MultiplyIter;
MultiplyIter begin =
boost::make_transform_iterator(m.begin(),
Function(std::multiplies<double>(), 4));
// now want to similarly create an end iterator
// and then iterate over the modified map
Run Code Online (Sandbox Code Playgroud)
错误是:
error: conversion from 'boost
::transform_iterator<
boost::binder2nd<multiplies<double> >, gen_map<int, double>::iterator
, boost::use_default, boost::use_default
>' to non-scalar type 'boost::transform_iterator<
boost::binder2nd<multiplies<double> >, pair<const int, double> *
, boost::use_default, boost::use_default
>' requested
Run Code Online (Sandbox Code Playgroud)
是什么gen_map?我真的需要吗?
我transform_iterator从这里改编了教程代码来编写这段代码......
std :: multiply,它期望一个double作为第一个参数,而不是一个std :: pair.
transform函数必须采用单个std :: pair参数(因为map元素是一对键值)并返回你想要的任何内容.
可以使用以下函数代替std :: multiply.
double times(std::pair<int,double> const& p, int i) {
return i*p.second;
}
boost::make_transform_iterator(m.begin(),
Function(times, 4));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1234 次 |
| 最近记录: |