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
が含まれます。
はい、アルゴリズムヘッダーに set_difference 関数があります。
編集:
参考までに、 documentation に記載されているように、設定されたデータ構造はそのアルゴリズムを効率的に使用できます。このアルゴリズムは、セットだけでなく、ソートされたコレクションのイテレーターのペアでも機能します。
他の人が述べたように、これはメソッドではなく外部アルゴリズムです。おそらくそれはあなたのアプリケーションにとっては問題ないでしょう。
言語の意味では「演算子」ではありませんが、標準ライブラリにはset_differenceアルゴリズムがあります。
http://www.cplusplus.com/reference/algorithm/set_difference.html
もちろん、リンクされた記事の最後にある「関連項目」セクションで提案されているように、他の基本的な集合演算も存在します(結合など)。
もう一度、救助を後押しします。
#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があります
template <class InputIterator1, class InputIterator2, class OutputIterator>
OutputIterator set_difference(InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,
OutputIterator result);
どうやら、そうです。
C++では、差集合演算子は定義されていませんが、独自に定義できます(他の応答で指定されたコードを使用)。
template<class T>
set<T> operator -(set<T> reference, set<T> items_to_remove)
{
set<T> result;
std::set_difference(
reference.begin(), reference.end(),
items_to_remove.begin(), items_to_remove.end(),
std::inserter(result, result.end()));
return result;
}