If you want, you could overload the operator for objects of type Point, then use these to simplify the above code and keep things where they belong logically speaking.
That's sort of true. The boost::tie trick is more useful for implementing operator<.
Though I'd expect that if I can compare two things for equality, then I can also
compare them for inequality.
While I like (and use) Boost, the std::rel_ops namespace also provides such functionalities. It would be difficult to decide, however, whether a 3D point X < Y, without some domain-specific criteria. For (mathematical) vectors, perhaps the length of the vector (x,y,z) would be at issue?