75

C++ STL 集合データ構造には集合差分演算子がありますか?

4

10 に答える 10

151

はい、あり<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.

于 2008-11-12T13:59:14.723 に答える
11

はい、アルゴリズム ヘッダーにset_difference関数があります。

編集:

参考までに、ドキュメントに記載されているように、set データ構造はそのアルゴリズムを効率的に使用できます。このアルゴリズムは、セットだけでなく、ソートされたコレクションに対する反復子の任意のペアでも機能します。

他の人が述べたように、これはメソッドではなく外部アルゴリズムです。おそらく、それはあなたのアプリケーションにとっては問題ありません。

于 2008-11-12T13:52:52.473 に答える
4

言語的な意味での「演算子」ではありませんが、標準ライブラリには set_difference アルゴリズムがあります。

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

もちろん、リンクされた記事の最後にある「関連項目」セクションで示唆されているように、他の基本的なセット操作 (結合など) も存在します。

于 2008-11-12T13:55:38.240 に答える
1

メソッドとしてではなく、外部アルゴリズム関数 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

于 2008-11-12T13:54:18.803 に答える
1

どうやら、そうです。

SGI-set_difference

于 2008-11-12T13:54:41.207 に答える
-1

使えますか

 set_difference(set1.begin(), set1.end(), set2.begin(). set2,end(),std::back_inserter(result)).
于 2013-01-03T22:34:11.240 に答える