gpt4 book ai didi

c++ - 如何从 std::map 中过滤项目?

转载 作者:IT老高 更新时间:2023-10-28 12:49:16 28 4
gpt4 key购买 nike

我大致有以下代码。这可以做得更好或更有效吗?也许使用 std::remove_if?您可以在遍历 map 时从 map 中删除项目吗?我们可以避免使用临时 map 吗?

typedef std::map<Action, What> Actions;
static Actions _actions;

bool expired(const Actions::value_type &action)
{
return <something>;
}

void bar(const Actions::value_type &action)
{
// do some stuff
}

void foo()
{
// loop the actions finding expired items
Actions actions;
BOOST_FOREACH(Actions::value_type &action, _actions)
{
if (expired(action))
bar(action);
else
actions[action.first]=action.second;
}
}
actions.swap(_actions);
}

最佳答案

Mark Ransom 算法的一种变体,但不需要临时算法。

for(Actions::iterator it = _actions.begin();it != _actions.end();)
{
if (expired(*it))
{
bar(*it);
_actions.erase(it++); // Note the post increment here.
// This increments 'it' and returns a copy of
// the original 'it' to be used by erase()
}
else
{
++it; // Use Pre-Increment here as it is more effecient
// Because no copy of it is required.
}
}

关于c++ - 如何从 std::map 中过滤项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/180516/

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