の「セット」set_intersection
は意味ではなくstd::set
、単に論理セットを意味します。もののグループ。両方のコレクションが並べ替えられている場合は、単純set_intersection
に 2 つを 3 番目のコンテナーに入れることができます。
vector<int> common;
set_intersection(v.begin(), v.end(), s.begin(), s.end(), back_inserter(common));
編集:
上記を説明する完全な例を次に示します。これは C++11 ラムダを使用しますが、C++11 がない場合、またはラムダを使用できない場合は、代わりにファンクタを使用できます。明示的なループがないことに注意してください。
#include <set>
#include <vector>
#include <algorithm>
#include <iterator>
#include <functional>
#include <iostream>
using namespace std;
static const int numbers[] = {0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181};
static const size_t num_numbers = sizeof(numbers)/sizeof(numbers[0]);
int main()
{
/*** GET THE SET ****/
set<int> s(begin(numbers), end(numbers));
//copy(&numbers[0], &numbers[num_numbers], inserter(s, s.begin()));
/*** GET THE NUMBERS TO LOOK FOR **/
int first = 5, last = 10;
vector<int> targets;
generate_n(back_inserter(targets), last-first, [&first]() -> int {
return first++;
});
/*** FIND THE INTERSECTION ***/
vector<int> common;
set_intersection(s.begin(), s.end(), targets.begin(), targets.end(), back_inserter(common));
/*** DUMP RESULTS ***/
cout << "Intersecton of:\n\t";
copy(s.begin(), s.end(), ostream_iterator<int>(cout,"\t"));
cout << "\nwith:\n\t";
copy(targets.begin(), targets.end(), ostream_iterator<int>(cout,"\t"));
cout << "\n= = = = = = = =\n\t";
copy(common.begin(), common.end(), ostream_iterator<int>(cout,"\t"));
cout << "\n";
}
出力は次のとおりです。
Intersecton of:
0 1 2 3 5 8 13 21 34
55 89 144 233 377 610 987 1597 2584 4181
with:
5 6 7 8 9
= = = = = = = =
5 8