c – 如何迭代修改后的std :: map值?
发布时间:2020-12-16 09:27:30 所属栏目:百科 来源:网络整理
导读:我有一个std :: map,我想定义一个返回修改后的值的迭代器.通常,std :: map int,double :: iterator遍历std :: pair int,double,我想要相同的行为,只需将double值乘以常量. 我用boost :: transform_iterator尝试了它,但它没有编译: #include map#include boo
我有一个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 错误是: 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 >' requested 什么是gen_map,我真的需要吗? 我从here改编了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)); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |