#include <iostream>
struct A {
    int x;
    std::string name;
    A(int v, std::string n):x(v), name(n) {};
    void do_it() const { std::cout << name.c_str() << "\n"; }
};
bool operator<( A lhs, A rhs ) { return lhs.x < rhs.x; }

#include <algorithm>
int main() {
    A a(5, "A");
    A b(5, "B");
    std::min( a, b ).do_it();
    std::min( b, a ).do_it();
}