【问题标题】:Get every item matches the condition in a map with iterator使用迭代器获取每个项目与地图中的条件匹配
【发布时间】:2016-01-14 10:27:18
【问题描述】:

我想获得所有符合条件的项目。据我所知,我能做的是代码迭代器,但我不知道如何继续下去。这是我的代码:

map<string, Device*>::iterator it;
    it = find_if(
        devicesMap.begin(),
        devicesMap.end(),
        [](Device* item)->bool{return item->Name() == ""; });

此代码将获得第一项匹配条件,因为我在代码的另一部分中使用它,但如果有多个,我怎么能在不通过整个地图的情况下通过所有这些?

【问题讨论】:

  • 首先你需要阅读更多关于find_if的信息,尤其是谓词函数的参数是什么,因为对于std::map,你认为它是not类型是。那么对于您的问题,也许您可​​以使用copy_if 复制到新容器?
  • 在代码的另一部分我的意思是,我确实没有将find_ifstd::map 一起使用,而是与std::list 一起使用。回答您的问题,不,我可以创建对象的副本,因为我想修改它们。我想把所有没有名字的人都写下来。
  • 你可以把它们(使用copy_if)放在一个指针指向实际对象的容器中。

标签: c++ dictionary lambda iterator


【解决方案1】:

最后,感谢@Joachim,我以这种方式解决了这个问题:

copy_if(originalMap->begin(),
            originalMap->end(),
            inserter(auxMap, auxMap.end()),
            [auxTimevar](std::pair<string, SnmpHwObject*> n)->bool
        {
            seconds sec = chrono::duration_cast<seconds>(n.second->TimeStamp());
            return (rightNow - sec.count() >= TEN_SECONDS);
        });

如果有人对此感兴趣,我会发布它。 我用一个简单的for 和它的if条件检查了算法,它可以工作。

【讨论】:

    猜你喜欢
    • 2019-01-10
    • 2011-01-22
    • 2014-10-24
    • 1970-01-01
    • 2020-08-24
    • 1970-01-01
    • 1970-01-01
    • 2018-04-18
    相关资源
    最近更新 更多