У неупорядоченных ассоциативных контейнеров unordered_set
, unordered_map
и т.д. не меньше оператора operator<
, не как функция-член, а как свободная функция. Зачем? Специализации less
нет. SGI STL hash_*
также не имеют этой функции.
Если исключить понятие базовых типов, все типы контейнеров удовлетворяют требованиям обычных типов, как определено, например. в Элементах программирования Степанова и Макджона. Единственным исключением являются неупорядоченные ассоциативные типы, которым не хватает operator<
.
Я не мог придумать эффективную реализацию такого оператора, который бы соответствовал данному определению равенства, так что может быть причиной эффективности? С другой стороны, operator==
для неупорядоченных ассоциативных контейнеров в некоторых случаях требует перефразировать каждый элемент одного контейнера и искать его в другом - O (N) среднем, но в худшем случае O (N²).