Define operators only on your own types. More precisely, define them in the same headers, .cc files, and namespaces as the types they operate on. That way, the operators are available wherever the type is, minimizing the risk of multiple definitions.
If possible, avoid defining operators as templates, because they must satisfy this rule for any possible template arguments.
If you define an operator, also define any related operators that make sense, and make sure they are defined consistently. For example, if you overload <
, overload all the comparison operators, and make sure <
and >
never return true for the same arguments.