假设我有一个列表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;
}
}