Tôi muốn lặp qua một std :: map sử dụng BOOST_FOREACH và chỉnh sửa các giá trị. Tôi không thể hiểu được.sử dụng BOOST_FOREACH với 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
Tất nhiên điều này không thay đổi bất cứ điều gì vì tôi không lặp lại tham chiếu. Vì vậy, tôi thay thế dòng này để thay thế (theo ví dụ trong tài liệu Boost):
BOOST_FOREACH(IdSizePair_t &i, mmap)
và tôi nhận được lỗi biên dịch:
error C2440: 'initializing' :
cannot convert from 'std::pair<_Ty1,_Ty2>' to 'IdSizePair_t &'
with
[
_Ty1=const int,
_Ty2=int
]
Bất kỳ lời đề nghị?
trình biên dịch gì bạn đang sử dụng? Tôi đã thử mã của bạn trên VS2008 và nó hoạt động chính xác. Tôi cũng đã thử nghiệm [answer] (http://stackoverflow.com/questions/795443/using-boostforeach-with-stdmap/795482#795482) của hvint) và nó đã hoạt động. Tôi đang sử dụng tăng 1,36, nếu điều đó quan trọng. –
bạn có thể đã quên &? mà không có nó, nó sao chép các cặp khác, và constness sẽ không quan trọng sau đó. –