Often times I find myself using std::pair to define logical groupings of two related quantities as function arguments/return values. Some examples: row/col, tag/value, etc.
You can still reuse the pair functionality by forwarding to it:
pair
bool operator< ( const Position &a, const Position &b ) { return std::make_pair( a.row, a.col ) < std::make_pair( b.row, b.col ); }
Although you still end up with doing this for every operatory you need...