Existen clases definidas en la STL que si las instancias, poseen un metodo que se llama "operator", finalmente da lo mismo el nombre de ese metodo, pues nunca es invocado explicitamente.
Si defines un objeto de ese tipo especial, ese objeto es "capaz" de realizar acciones con 2 parametros del mismo tipo.
La clase "greater" es una de estas clases.
Si tienes un objeto de tipo greater, al hacer obj.operator()( objetoA, objetoB ), esa operacion devuelve un booleano dependiendo si el objetoA es mayor que el objetoB.
Como "greater" pudo ser tan inteligente y decidir que objetoA era mayor (o menor) que objetoB?
Pues en realidad no lo sabe, y hay que hacer mas cosas para que ese objeto logre realizar algo util.
Es necesario "aumentar" las operaciones del lenguaje para que greater invoque el operador < cuando se invoque el metodo operator().
Finalmente, las colas de prioridad tambien existen en la STL y ellas esperan un functor en el constructor del objeto, para poder comparar los elementos al interior de la cola de prioridad.
Si toda esta explicacion te clarifico' pero esperas un ejemplo concreto, encontre' uno en la pagina:
http://cs.stmarys.ca/~porter/csc/ref...eue06.cpp2html
Si te fijas en el ejemplo, se define la funcion operator>, pero no se invoca explicitamente nunca, pero es el objeto greater<Event> el que lo hara.