C++ C++;STL容器中优先搜索的优雅方式

C++ C++;STL容器中优先搜索的优雅方式,c++,qt,c++11,C++,Qt,C++11,我编写了一个小函数,其目的是按顺序遍历元素列表,对其hashmap值进行一些检查,如果通过,则返回它 QString ElementContainer::getPreferedAvailableElement() const { QStringList preferred_priority = { A, B, C, D, E }; foreach(QString element, preferred_priority){ Element* data = m_ha

我编写了一个小函数,其目的是按顺序遍历元素列表,对其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函数不应该被强制,不管它是否有意义。我只是好奇你怎么能转换它,如果它可能更详细。

你可以使用
std::find\u如果像这样:

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("");
}

你能把你的问题重新表述一下吗?目前还不清楚您试图实现什么,到目前为止您做了什么,以及问题出在哪里。您似乎正在使用它的一种Qt变体(带有各种宏)编写代码。这是解决方案的一个约束吗?@Hack06我试图实现的目标是:找到hashmap的第一个元素,按照首选优先级列表的顺序匹配isReady标准。到目前为止,我所做的事情都在上面展示了,这是一种天真的做法。我的问题是,是否有一种更可读、更详细、更简洁的方式来编写它。@Yakk AdamNevraumont它确实是C++11的一种Qt变体。QStringList中的元素不是宏,而是常量。我想应该没关系。@Curunir
foreach
就是一个QT宏。在C++11中不需要它:
for(QString元素:preferred_priority)
是一个没有宏的例子。我正是在寻找它,我不知道在std名称空间中搜索什么。谢谢