Вы быстро обнаружите, что не можете поместить std::set<T>
в тот же контейнер, что и std::set<U>
, если T
отличается от U
. Таким образом, вы, вероятно, в конечном итоге получите
struct any_less {
bool operator()(const std::any & lhs, const std::any & rhs) {
return type_index(lhs.type()) < type_index(rhs.type());
}
}
using ordered_pair = std::set<std::set<std::any, any_less>>;
Кодификацию вашего отношения повторения.
template <typename A, typename B>
ordered_pair make_ordered_pair(A a, B b) {
return { { a }, { a, b } };
}
template <typename A, typename B, typename C, typename... Rest>
ordered_pair make_ordered_pair(A a, B b, C c, Rest... rest) {
return { { a }, { a, make_ordered_pair(b, c, rest...) } };
}
Но C ++ имеет гораздо лучший тип для упорядоченных пар: std::pair
. Он также имеет гораздо лучший тип для кортежей: std::tuple
.