Компаратор по умолчанию для std::set
равен std::less<Key>
, и, как мы видим на std::less
, он определяет:
constexpr bool operator()( const T& lhs, const T& rhs ) const;
, который принимает constаргументы и возвращает lhs < rhs
. Это, конечно, не работает, если lhs < rhs
недопустимо для константных аргументов, как это происходит во втором случае, потому что bool operator < (first t)
не может быть вызван.
Написание собственного компаратора, который принимает неКажется, что аргументы const тоже не работают, поэтому, похоже, это требование заказанного контейнера, но для подтверждения необходима дополнительная проверка со стандартом.