【发布时间】:2010-10-22 04:19:27
【问题描述】:
我想使用 BOOST_FOREACH 遍历 std::map 并编辑值。我不太明白。
typedef std::pair<int, int> IdSizePair_t;
std::map<int,int> mmap;
mmap[1] = 1;
mmap[2] = 2;
mmap[3] = 3;
BOOST_FOREACH( IdSizePair_t i, mmap )
i.second++;
// mmap should contain {2,3,4} here
当然,这不会改变任何事情,因为我没有通过引用进行迭代。所以我用这一行代替(根据 Boost 文档中的示例):
BOOST_FOREACH( IdSizePair_t &i, mmap )
我得到编译器错误:
error C2440: 'initializing' :
cannot convert from 'std::pair<_Ty1,_Ty2>' to 'IdSizePair_t &'
with
[
_Ty1=const int,
_Ty2=int
]
有什么建议吗?
【问题讨论】:
-
你用的是什么编译器?我在VS2008上试过你的代码,它工作正常。我也测试了 hvint 的 answer 并且它有效。如果这很重要,我正在使用 boost 1.36。
-
你可能忘记了 & ?没有它,它会复制另一对,然后常量就无关紧要了。
标签: c++ boost foreach maps std