Мне известно, что ассоциативные контейнеры STL (и другие контейнеры, которые, как я предполагаю, сортируются) используют критерий сортировки для проверки на равенство.
Критерий сортировки для контейнеров по умолчанию равен st :: less, таксделал бы тест на равенство для контейнера:
if (! (lhs < rhs || rhs < lhs))
или что-то подобное.У меня была пара вопросов по этому поводу ...
Прежде всего, это кажется странно неэффективным способом сравнения на равенство - почему STL делает это так?Я ожидал бы, что контейнеры STL просто примут вместо этого дополнительный параметр по умолчанию для равенства.
Мой второй вопрос больше касается оценки оператора if в целом.В C ++, сколько из этого утверждения будет оценено (lhs> rhs), было правдой?Перестанет ли он пытаться после оценки стороны, которая потерпела неудачу, таким образом сохраняя некоторую эффективность?Если да, какая часть выражения вычисляется первой?