Объекты сравнения, используемые в контейнерах STL, а также предикаты, используемые в алгоритмах STL, должны быть копируемыми объектами и методами, и алгоритмы могут свободно копировать эти функции по своему усмотрению.
Это означает, что если ваш объект сравнения содержит состояние, это состояние должно быть скопировано правильно, поэтому вам может потребоваться предоставить подходящий конструктор копирования и оператор назначения копирования.
Если вы хотите, чтобы ваш объект сравнения содержал изменяемое состояние, тогда проблема является более сложной, поскольку любые копии объекта сравнения должны совместно использовать изменяемое состояние. Если вы можете поддерживать состояние как отдельный объект, тогда ваши объекты сравнения могут хранить указатель на это внешнее состояние; в противном случае вы, вероятно, обнаружите, что вам нужно совместное владение общим состоянием, поэтому вам, вероятно, потребуется что-то вроде tr1::shared_ptr
для управления этим.