Я хочу найти объединение двух наборов, то есть сложить их вместе. Я в курсе .insert()
а также std::set_union()
, но, насколько я могу судить, они требуют, чтобы сначала получить итератор в начале и конце второго набора (или хуже для set_union()
). Было бы хорошо, если бы я мог сделать что-то вроде +
а также +=
; кажется, что это было бы довольно очевидной особенностью для класса, который реализует математическую концепцию множества. Какой самый простой способ сделать это?
Я не знаю ни одного способа упростить его с помощью существующих методов C ++.
Один из способов упростить алгоритмы контейнеров, которые работают со всем контейнером, — обернуть их в шаблонный метод, принимающий контейнер:
template <typename T>
void my_union(const T& cont1, const T& cont2, T& cont3)
{
// Make the union and store the result in cont3
}
Если вы хотите иметь оператор для этого, вы можете легко определить его самостоятельно:
template <typename T>
inline set<T>& operator+=(set<T>& lhs, const set<T>& rhs)
{
lhs.insert(begin(rhs), end(rhs));
return lhs;
}
template <typename T>
inline set<T> operator+(set<T> lhs, const set<T>& rhs)
{
lhs += rhs;
return lhs;
}
int main() {
set<int> a = {1, 2, 3 };
set<int> b = { 2, 3, 4};
a += b;
for (auto i : a)
cout << i << " ";
return 0;
}
Приведенный выше пример напечатает 1 2 3 4
на консоль.
Других решений пока нет …