【发布时间】:2010-04-26 21:09:53
【问题描述】:
考虑以下非工作代码:
typedef map<int, unsigned> mymap;
mymap m;
for( int i = 1; i < 5; ++i )
m[i] = i;
// 'remove' all elements from map where .second < 3
remove_if(m.begin(), m.end(), bind2nd(less<int>(), 3));
我正在尝试从该地图中删除 .second < 3 的元素。这显然写得不正确。如何正确使用:
- 使用
bind+less<>的标准 STL 函数对象和技术,但无需编写自定义函子 - Boost.Bind
- C++0x Lambdas
我知道我不是eraseing 元素。不用担心;我只是简化要解决的问题。
【问题讨论】:
-
我相信 #1 无法解决 - 成员函数只有绑定器,没有 "value iterators",我也不能来通过结合活页夹和
&std::map<int,unsigned>::value_type::second,可以使用合适的标准库函数。
标签: c++ stl c++11 boost-bind