Проверьте, содержит ли один и тот же элемент списка true или false

#c

#c

Вопрос:

Допустим, у меня есть такой список std::list<MyClass> myList :

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

И это логическое значение берется из функции bool isExpired(MyClass amp;a) .

Как я могу проверить, имеет ли одна группа элементов одинаковые или разные логические значения? Например, в этом случае 1000 должно быть false, потому что вторая 1000 в списке имеет значение false .

Это false

 1000    true
1000    false //because of this
1000    true
 

Это false

 2000    false
2000    false
 

Это верно

 3000    true
3000    true
 

Я попытался создать новую карту, которая переопределит ключ и значение.

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

Но это работает не так, как ожидалось. Он возвращает true для элемента с идентификатором 1000.

Ответ №1:

Вы не хотите использовать || , вы хотите использовать amp;amp; , что означает, что по умолчанию вы должны использовать значение true:

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