C++ STL 容器中优先级搜索的优雅方法

C++ elegant way for prioritized search in STL container

本文关键字:方法 搜索 优先级 STL C++      更新时间:2023-10-16

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

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