Оценка равенства в ассоциативных контейнерах (STL)

Я знаю, что ассоциативные контейнеры STL (и другие сортируемые контейнеры, как я полагаю) используют критерий сортировки для проверки равенства.

Критерий сортировки для контейнеров по умолчанию st :: less, поэтому проверка равенства для контейнера:

if (! (lhs < rhs || rhs < lhs))

или что-то подобное. У меня было несколько вопросов по этому поводу ...

Во-первых, это кажется странно неэффективным способом сравнения на равенство - почему STL делает это так? Я ожидал, что контейнеры STL просто возьмут дополнительный параметр по умолчанию для равенства.

Мой второй вопрос больше касается оценки приведенного выше оператора if в целом. В C ++, какая часть этого утверждения будет оценена (lhs> rhs) верна? Перестанет ли он пытаться после оценки стороны, которая потерпела неудачу, что сэкономило бы некоторую эффективность? Если да, то какая часть выражения оценивается первой?

9
задан John Humphreys - w00te 21 November 2011 в 19:44
поделиться