puoi implementarlo tramite una funzione friend

codice:
#include <list>
using namespace std;

class Arco
{
public :
	int ID,
		tail,
		head;

	friend bool operator<(Arco primo_tail, Arco secondo_tail);
};

typedef list<Arco> listaArchi;

bool operator<(Arco primo_tail, Arco secondo_tail)
{
        // Non so che scrivere se levo primo_tail
	return primo_tail.tail < secondo_tail.tail;
}

oppure come come metodo della classe Arco

codice:
#include <list>
using namespace std;

class Arco
{
public :
	int ID,
		tail,
		head;

	bool operator<(Arco secondo_tail);
};

typedef list<Arco> listaArchi;

bool Arco::operator<(Arco secondo_tail)
{
        // Ecco come puoi scriverlo
        // tail equivale implicitamente a this->tail
	return tail < secondo_tail.tail;
}

ad ogni modo è meglio passare i parametri "by reference"
per evitare una copia inutile ogni volta che invochi il metodo

codice:
#include <list>
using namespace std;

class Arco
{
public :
	int ID,
		tail,
		head;

	bool operator<(const Arco& secondo_tail) const; 
        //                                       ^^^^^
        // metodo "const", infatti non modifica l'oggetto
};

typedef list<Arco> listaArchi;

bool Arco::operator<(const Arco& secondo_tail) const
{
        // Ecco come puoi scriverlo
        // tail equivale implicitamente a this->tail
	return tail < secondo_tail.tail;
}