gpt4 book ai didi

c++ - 使用 STL/Boost/Lambdas 调整映射迭代器

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:40:45 24 4
gpt4 key购买 nike

考虑以下非工作代码:

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));

我正在尝试从这张 map 中删除元素 .second < 3 .这显然没有写对。我如何正确地写这个:

  1. 使用 bind 的标准 STL 函数对象和技术+ less<>但无需编写自定义仿函数
  2. 提升.绑定(bind)
  3. C++0x Lambda

我知道我不是 erase荷兰国际集团的元素。别担心;我只是简化要解决的问题。

最佳答案

我不确定如何仅使用 STL 绑定(bind)器来执行此操作,但我认为您的主要问题是传递给 remove 的仿函数的内容是什么?不只是一个 int但是一个pair<int, unsigned> .

使用 boost::bind 你会这样做:

remove_if(m.begin(), m.end(), bind(&std::pair<int, unsigned>::second, _1) < 3);

使用 lambda 函数是这样的:

remove_if(m.begin(), m.end(), [](const std::pair<int, unsigned>& p) { return p.second < 3; } );

抱歉,我还没有检查过它是否编译。

关于c++ - 使用 STL/Boost/Lambdas 调整映射迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2716917/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com