回答を示す、

1. 「<」と「==」演算子をグローバルな関数として定義する版:
https://ideone.com/Qdi402


2. 「<」と「==」演算子をクラスのメソッドとして定義する版:
https://ideone.com/3JTyiJ


3. (参考)スマポ版
https://ideone.com/bYOWcR

元のコードはいきなりinsertしようとしているがinsertの動作はinsertしてから重複だったかどうか返すというものなので、
生ポインタ版である1と2では事前にfindしている
3は事前findが不要で本来のコードとなったが、動作は後優先(先にinsertしたaと、後からinsertしたbがsameの場合、aが削除され、bが残る。)