How can I use a custom type as key for a map in C++?
I suspect you need
bool operator<(const Foo& foo1) const;
Note the const
after the arguments, this is to make "your" (the left-hand side in the comparison) object constant.
The reason only a single operator is needed is that it is enough to implement the required ordering. To answer the abstract question "does a have to come before b?" it is enough to know whether a is less than b.
It's probably looking for const member operators (whatever the correct name is). This works (note const):
bool operator<(const Foo& foo1) const { return foo_value < foo1.foo_value;}
EDIT: deleted operator>
from my answer as it was not needed (copy/paste from question) but it was attracting comments :)
Note: I'm 100% sure that you need that const because I compiled the example.