c ++ STL设置差异

C ++ STL集合数据结构是否具有集合差异运算符?

是的,它在<algorithm> ,被称为: std::set_difference 。 用法是:

 #include <algorithm> #include <set> #include <iterator> // ... std::set<int> s1, s2; // Fill in s1 and s2 with values std::set<int> result; std::set_difference(s1.begin(), s1.end(), s2.begin(), s2.end(), std::inserter(result, result.end())); 

最后,设置result将包含s1-s2

是的,algorithm头中有一个set_difference函数。

编辑:

仅供参考,设置的数据结构能够有效地使用该algorithm,如其文档中所述 。 该algorithm不仅适用于集合,而且适用于sorting集合上的任何迭代器对。

正如其他人所说,这是一个外部algorithm,而不是一个方法。 大概这对你的应用程序很好。

不是语言意义上的“操作符”,而是标准库中的set_differencealgorithm:

http://www.cplusplus.com/reference/algorithm/set_difference.html

当然,其他基本的集合操作也存在 – (联合等),正如链接文章末尾的“另见”部分所build议的。

所选的答案是正确的,但有一些语法错误。

代替

 #include <algorithms> 

使用

 #include <algorithm> 

代替

 std::insert_iterator(result, result.end())); 

使用

 std::insert_iterator<set<int> >(result, result.end())); 

不是一种方法,但有外部algorithm函数set_difference

 template <class InputIterator1, class InputIterator2, class OutputIterator> OutputIterator set_difference(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result); 

http://www.sgi.com/tech/stl/set_difference.html

显然,它确实如此。

SGI – set_difference

再次提振救援:

 #include <string> #include <set> #include <boost/range/algorithm/set_algorithm.hpp> std::set<std::string> set0, set1, setDifference; boost::set_difference(set0, set1, std::inserter(setDifference, setDifference.begin()); 

setDifference将包含set0-set1。

我们可以用吗?

  set_difference(set1.begin(), set1.end(), set2.begin(). set2,end(),std::back_inserter(result)).