У меня примерно следующий код. Может ли это сделать лучше или эффективнее? Возможно, используя std::remove_if? Можете ли вы удалить элементы с карты во время их перемещения? Можем ли мы избежать использования временной карты?
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);
}
