C ++懒惰的方式找到std :: sets的联合

时间:2014-03-13 15:32:02

标签: c++ stl set add

我想找到两组的联合,即将它们加在一起。我知道.insert()std::set_union(),但据我所知,这些要求首先获得第二组开头和结尾的迭代器(或{{1}更差) })。如果我能做set_union()+之类的事情,那就太好了。对于实现集合的数学概念的类来说,这似乎是一个相当明显的特征。最简单的方法是什么?

1 个答案:

答案 0 :(得分:2)

我不知道用现有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打印到控制台。