set_intersection
में "सेट" का मतलब std::set
नहीं है - इसका मतलब केवल तार्किक सेट है; चीजों का एक समूह। यदि दोनों संग्रहों को क्रमबद्ध किया गया है, तो आप केवल set_intersection
दोनों को तीसरे कंटेनर में कर सकते हैं।
vector<int> common;
set_intersection(v.begin(), v.end(), s.begin(), s.end(), back_inserter(common));
संपादित करें:
यहां एक संपूर्ण उदाहरण है कि इसके बाद के संस्करण को दिखाता है। यह सी ++ 11 लैम्ब्डा का उपयोग करता है, लेकिन यदि आपके पास सी ++ 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
होमवर्क? साक्षात्कार सवाल? –
@ जॉन डीबलिंग: न तो, मेरे काम पर उत्पन्न एक व्यावहारिक स्वाद –
नमूना के लिए कोड लिखना था, इसलिए मुझसे +1। :) –