假设我有一个像这样的列表 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 应该是假的,因为列表中的第二个 1000 有假值。
这是假的
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
。
答案 0 :(得分:1)
你不想用||
,你想用&&
,这意味着你必须默认为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;
}
}