#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;
}
}