using BOOST_FOREACH with std::map
The problem is with the first member of the pair, which should be const. Try this:
typedef std::map<int, int> map_t;
map_t mmap;
BOOST_FOREACH( map_t::value_type &i, mmap )
i.second++;
This is an old thread, but there is a more convenient solution.
boost has the notion of 'range adapters' that perform a transformation on iterator ranges. There are specific range adapters for this exact use case (iterating over map keys or values): boost::adaptors::map_values
and boost::adaptors::map_keys
.
So you could iterate over map values like this:
BOOST_FOREACH(int& size, mmap | boost::adaptors::map_values)
{
++size;
}
More information here.
Another option is to use BOOST_FOREACH_PAIR, see my answer here:
BOOST_FOREACH & templates without typedef