簡體   English   中英

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

[英]How to iterate over modifed std::map values?

我有一個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, boost::use_default
>' requested

什么是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));
typedef boost::transform_iterator<Function, 
  Map::iterator> MultiplyIter; // value_type* only occasionally
                               // works as an iterator

gen_map似乎是std::map基礎類名。

本教程使用int*因為指針是迭代C樣式數組的正確類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM