首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何迭代修改后的std::map值?

如何迭代修改后的std::map值?
EN

Stack Overflow用户
提问于 2010-05-01 01:39:50
回答 2查看 1.2K关注 0票数 3

我有一个std::map,我想定义一个返回修改后的值的迭代器。通常,std::map<int,double>::iteratorstd::pair<int,double>上迭代,我也想要同样的行为,只是双精度值乘以一个常量。

我用boost::transform_iterator试过了,但它不能编译:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#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

错误是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

什么是gen_map,我真的需要它吗?

我改编了来自heretransform_iterator教程代码来编写此代码……

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-05-01 01:59:37

std::multiply,它需要一个双精度值作为第一个参数,而不是std::对。

transform函数必须接受一个std::pair参数(因为map元素是一对键值),并返回您想要的任何内容。

可以使用以下函数代替std::multiply。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
double times(std::pair<int,double> const& p, int i) {
  return i*p.second;
}

boost::make_transform_iterator(m.begin(),
                                 Function(times, 4));
票数 5
EN

Stack Overflow用户

发布于 2010-05-01 01:47:05

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
typedef boost::transform_iterator<Function, 
  Map::iterator> MultiplyIter; // value_type* only occasionally
                               // works as an iterator

gen_map似乎是std::map背后的类名。

本教程使用int*,因为指针是迭代C样式数组的合适类型。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2748550

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文