J'ai un std::map
, et je voudrais définir un itérateur qui renvoie des valeurs modifiées. En règle générale, un std::map<int,double>::iterator
itère sur std::pair<int,double>
, et je voudrais le même comportement, juste la double valeur est multipliée par une constante.Comment itérer sur des valeurs std :: map modifiées?
Je l'ai essayé avec boost::transform_iterator
, mais il ne compile pas:
#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
L'erreur est:
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
Qu'est-ce que gen_map
et dois-je vraiment besoin?
J'adapté le code tutoriel transform_iterator
de here écrire ce code ...
Il est bien ce coup de pouce rend cela possible du tout, mais je souhaite qu'il y avait des solutions beaucoup plus simples disponibles ... – Frank