检查同一列表元素是否包含true或false



假设我有一个列表std::list<MyClass> myList,如下所示:

ID      Valid
--------------
1000    true
1000    false
1000    true
2000    false
2000    false
3000    true
3000    true

这个布尔值来自函数bool isExpired(MyClass &a)

如何检查一组元素的布尔值是相等还是不同?例如,在这种情况下,1000应该是false,因为列表中的第二个1000具有false值。

这是错误的

1000    true
1000    false //because of this
1000    true

这是错误的

2000    false
2000    false

这是真正的

3000    true
3000    true

我试图创建一个新的映射,它将覆盖键和值。

std::map<long, bool> status;
for(const auto &it : myList)
{
status[it.ID] = status[it.ID] || isExpired(it); 
}

但它并没有如预期的那样发挥作用。它为ID为1000的元素返回true

你不想使用||,你想使用&&,这意味着你必须默认为true:

std::map<long, bool> status;
for(const auto &it : myList)
{
auto entry = status.find(it.ID);
if (entry != status.end()) {
entry->second = entry->second && isExpired(it);
} else {
status[it.ID] = true;
}
}

相关内容

  • 没有找到相关文章

最新更新