Здравствуйте, Alexey F, Вы писали:
AF>Здравствуйте, Сыроежка, Вы писали:
С>>Вы же используете алгоритм с предикатом. Можно исхитриться и придумать предикат, который будет давать нужный результат. Например, предикат, который будет возращать значение оператора != при каждом нечетном вызове предиката.
AF>Для lexicographical_compare придётся писать предикат сложнее a == b:
AF>здесьАвтор: Alexey F
Дата: 29.12.11
AF>(код взят из стандарта, только < заменён на cmp) и даже не a != b с отрицанием результата — это ещё больше (помимо вводящего в заблуждение имени) затуманит цель кода для того, кто будет потом в нём разбираться.
На самом деле предикат простой и не затуманит. Другое дело, что внутри алгоритма этот предикат вызывается дважды, что, как говорится, не комильфо. А так написать предикат очень просто. Достаточно завести внутри класса логической переменную, при каждом вызове предиката которая будет менть значение на прлтивоположное. При первом вызове предиката сотреть, если эта переменная равна
false, то возвращать ее. При втором вызове возвращать условие
a != b
То есть оператор функции будет состоять из одной строчки
return ( ( first = !first ) && ( a != b ) );
При этом начальное значение
first должно быть равно
true