От cplusplus.com:
template < class Key, class Compare = less<Key>,
class Allocator = allocator<Key> > class set;
"Compare: класс сравнения: класс, который принимает два аргумента того же типа, что и элементы контейнера, и возвращает bool. Выражение comp (a, b), где comp является объектом этого класса сравнения, а a и b являются элементами контейнера, должны возвращать true, если a должен быть помещен в более раннюю позицию, чем b, в операции строгого слабого упорядочения. Это может быть либо класс, реализующий оператор вызова функции, либо указатель на функцию (см. конструктор для пример). По умолчанию используется значение less, которое возвращает то же самое, что и применение оператора less-than (a <
b).
Объект set использует это выражение для определения положения элементов в контейнере. Все элементы в контейнере набора всегда упорядочены в соответствии с этим правилом. "
Учитывая, что класс сравнения используется для определения того, какой из двух объектов является «меньшим» или «меньшим», как класс проверяет, равны ли два элемента (например, чтобы предотвратить вставку одного и того же элемента дважды)?
Я могу представить здесь два подхода: один будет вызывать (a == b) в фоновом режиме, но не предоставит возможность переопределить это сравнение (как со значением по умолчанию less <Key>
), не кажется слишком STL- для меня. Другим было бы предположение, что (a == b) ==! (A Так как это на самом деле делается?