我有一个项目向量和一个布尔标志:
std::vector<std::pair<Item, bool>> items;
我正在每次迭代时对该向量中的所有最佳项目进行贪婪(并且效率低下,我知道这一点并且这是故意的)搜索。每次迭代后,我通过将布尔标志设置为 false 来使当前最佳项目无效。因此,在下一次迭代中,将不再考虑该项目,至少这是我正在尝试做的。我想继续下去,直到所有元素都为假。我通过 Item 类提供的 GetYield 函数获得了最佳价值:
while( std::any_of( items.begin(), items.end(),
[]( const auto& item ) { return item.second; } ) )
{
auto max_element = std::max_element( items.begin(), items.end(),
[&]( auto& itema, auto& itemb )
{
return itema.second && itemb.second && ( itema.first.GetYield() < itemb.first.GetYield() );
} );
max_element->second = false;
}
一旦第一个元素设置为 false,此代码就会挂起,它会一遍又一遍地返回相同的元素。我怎样才能解决这个问题而不需要从向量中删除元素(这就是我与布尔值配对的全部原因)?
比较向量中的两个元素,如果第一个元素“小于”第二个元素,则返回false
。
如果两项均为空,则比较应返回
false
itemA.second
true
。(“空”小于任何值)如果 itemB.second
false
。 (“有”总是大于“空”)如果都不为空,那么你可以比较GetYield()
false
、
false
、false
和 GetYield()
。