Пересечение 2 множеств в STL
Иногда бывает необходимо найти пересечение 2 множеств в С++ используя STL. Оказалось что это достаточно просто, в алгоритмах для этого есть специальная функция, которая зовется set_intersection . Также в алгоритмах есть функция для вычеслиния дополнения множеств set_difference. Ниже приведен минимальный пример.
#include <set> #include <iostream> #include <algorithm> using namespace std; typedef std::set<int> testsettype; void print(testsettype& output_set) { testsettype::iterator it = output_set.begin(); for(;it!=output_set.end();++it) { std::cout<<(*it)<<" "; } std::cout<<std::endl; } int main() { testsettype set1; testsettype set2; for(int i=0,j=2;i<10;++i,++j) { set1.insert(i); set2.insert(j); } print(set1); print(set2); testsettype res_set; std::set_intersection( set1.begin(),set1.end(),set2.begin(),set2.end(),inserter(res_set, res_set.end())); std::cout<<"Set's intersection:\n"; print(res_set); res_set.clear(); std::set_difference( set2.begin(),set2.end(),set1.begin(),set1.end(),inserter(res_set, res_set.end())); std::cout<<"Set's difference:\n"; print(res_set); return 0; }
и результат
0 1 2 3 4 5 6 7 8 9
2 3 4 5 6 7 8 9 10 11
Set's intersection:
2 3 4 5 6 7 8 9
Set's difference:
10 11
AntonAveev:
Super, pishite eshe, postoyanno vas chitay
22 July 2008, 8:10 pmVenturevine:
Venturevine…
Путешествовал в Интернете и попал сюда. Какое замечательное изобретение человечества. При помощи сети общаешься, изучаешь, читаешь… Вот …
25 March 2010, 3:12 pm