Instead of providing the two friend functions, you can provide a single function object that will do both operations.
struct CompareWeight {
bool operator()(const Person&, int) const;
bool operator()(int, const Person&) const;
};
Then you can call the algorithm as:
std::lower_bound(std::begin(v), std::end(v), CompareWeight());
Note: I agree with jrok that only one overload should be needed, but it seems that your implementation (which need not fully comply with the standard) requires the other direction, if that is the case this provides for a simple workaround.