使用迭代器获取映射中与条件匹配的每个项

Get every item matches the condition in a map with iterator

本文关键字:条件 迭代器 获取 映射      更新时间:2023-10-16

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

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

这个代码会得到第一个符合条件的项目,因为我在代码的另一部分使用它,但如果有多个,我怎么能在不浏览整个地图的情况下浏览所有项目?

最后,多亏了@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条件检验了该算法,它是有效的。