kmo*_*ote 45 c++ foreach maps boost std
我想使用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
Run Code Online (Sandbox Code Playgroud)
当然,这并没有改变任何东西,因为我没有通过引用迭代.所以我替换了这一行(根据Boost文档中的示例):
BOOST_FOREACH( IdSizePair_t &i, mmap )
Run Code Online (Sandbox Code Playgroud)
我得到编译器错误:
error C2440: 'initializing' :
cannot convert from 'std::pair<_Ty1,_Ty2>' to 'IdSizePair_t &'
with
[
_Ty1=const int,
_Ty2=int
]
Run Code Online (Sandbox Code Playgroud)
有什么建议?
hvi*_*tus 68
问题在于该对的第一个成员,它应该是const.试试这个:
typedef std::map<int, int> map_t;
map_t mmap;
BOOST_FOREACH( map_t::value_type &i, mmap )
i.second++;
Run Code Online (Sandbox Code Playgroud)
Ale*_*erg 21
这是一个旧线程,但有一个更方便的解决方案.
boost具有"范围适配器"的概念,它在迭代器范围上执行转换.对于这个确切的用例,有特定的范围适配器(迭代映射键或值):boost::adaptors::map_values
和boost::adaptors::map_keys
.
所以你可以迭代这样的地图值:
BOOST_FOREACH(int& size, mmap | boost::adaptors::map_values)
{
++size;
}
Run Code Online (Sandbox Code Playgroud)
更多信息在这里.
归档时间: |
|
查看次数: |
33182 次 |
最近记录: |