Accessing member variables through boost lambda placeholder

谁说我不能喝 提交于 2019-12-13 12:09:10

问题


I'm trying to print the second member variable of all items in an stl map using a lambda expression

map<int, int> theMap;
for_each(theMap.begin(), theMap.end(), 
         cout << bind(&pair<int, int>::second, _1) << constant(" "));

but this is not compiling. I essentially want to de-reference the placeholder. Any idea what I'm missing here?

Thanks in advance!


回答1:


std::map will add const to its key; this is to prevent messing up the ordering. Your pair should be:

std::pair<const int, int>

Like dirkgently suggests, use the value_type to always get the correct type. The verbosity is alleviated with a typedef:

typedef std::map<int, int> int_map;

int_map::value_type::second



回答2:


Try:

for_each(theMap.begin(), theMap.end(), 
         cout << bind(&map<int, int>::value_type::second, _1) << constant(" "));


来源:https://stackoverflow.com/questions/2323413/accessing-member-variables-through-boost-lambda-placeholder

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!