Если вы хотите создать лексикографический компаратор кортежей с помощью скалярного компаратора, просто сравните последнюю пару компонентов, которые не равны. Примерно так:
template<typename T>
class LexicographicCompare
{
private:
T Compare;
public:
LexicographicCompare(T Compare) : Compare(Compare)
{
}
bool operator()
( const tuple<int, int, int> & a
, const tuple<int, int, int> & b
) const
{
if (a[0] != b[0])
return Compare(a[0], b[0]);
if (a[1] != b[1])
return Compare(a[1], b[1]);
return Compare(a[2], b[2]);
}
};
sort(tuples.begin(), tuples.end(), LexicographicCompare(IntCompare()));