rem: if (l1.out == l2.in1 || l1.out == l2.in2) return true; else return l1.in1 < l2.in1 || (l1.in1 == l2.in1 && (l1.in2 < l2.in2 || (l1.in2 == l2.in2 && l1.out < l2.out)));
add: return (a.lookup_source < b.lookup_source || (a.lookup_source == b.lookup_source && (a.score < b.score || (a.score == b.score && a.glyph < b.glyph))));
context: operator<(const Metrics::Ligature3 &l1, const Metrics::Ligature3 &l2){    // topological < : is l1's output one of l2's inputs?    if (l1.out == l2.in1 || l1.out == l2.in2)	return true;    else	return l1.in1 < l2.in1 	    || (l1.in1 == l2.in1 && (l1.in2 < l2.in2				     || (l1.in2 == l2.in2 && l1.out < l2.out)));}