[S ++容器中优先搜索的C ++优雅方式

问题描述 投票:0回答:1

我写了一个小函数,其目的是按顺序遍历元素列表,对它的hashmap值进行一些检查,如果它们通过,则返回它。

QString ElementContainer::getPreferedAvailableElement() const
{
    QStringList preferred_priority = { A, B, C, D, E };
    foreach(QString element, preferred_priority){
        Element*  data = m_hashmap.value(element, nullptr);
        if(data && data->isReady()){
            return element;
        }
    }
    return QString("");
}

我知道,无论有意义与否,都不应强制使用这些功能类型的std函数。我只是很好奇您如何改变它,如果它更冗长。

c++ qt c++11
1个回答
1
投票

您可以像这样使用std::find_if

QString ElementContainer::getPreferedAvailableElement() const
{
   QStringList preferred_priority = { A, B, C, D, E };
   auto it = std::find_if(preferred_priority.begin(), 
      preferred_priority.end(), 
      [this](const QString & element)
   { 
      Element* data = m_hashmap.value(element, nullptr);
      return (data && data->isReady());
   });

   if (it != preferred_priority.end())
   {
      return *it;
   }

   return QString("");
}
© www.soinside.com 2019 - 2024. All rights reserved.