Ваш код не может работать 1 , потому что ваш operator<
не вводит строгий общий порядок . Одно требование для строгого общего порядка состоит в том, что для любых трех элементов a
, b
и c
a < b
и
b < c
подразумевается, что
a < c
(в математическом смысле). Давайте проверим это. Если мы возьмем
Combination a(1, 3);
Combination b(1, 4);
Combination c(3, 1);
, вы увидите, что
a < b => true
b < c => true
, но
a < c => false
Если вы не можете упорядочить элементы, которые вы не можете использовать std::set
. A std::unordered_set
кажется более подходящим для этой задачи. Вам просто нужно operator==
для сравнения на равенство, что тривиально, и функция ha sh, которая возвращает одинаковое значение для элементов, которые считаются идентичными. Это может быть так же просто, как добавить m
и n
.
1 Ну, может быть, может работать, или нет, или оба, это неопределенное поведение.