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);
显然,它确实如此。
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)).