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