#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
#include <string>
#include <ostream>
struct stockTest
{
std::string title;
std::string getTitle() const { return title; }
stockTest(const std::string s) : title(s) {}
friend std::ostream& operator << (std::ostream& os, const stockTest&);
};
std::ostream& operator << (std::ostream& os, const stockTest& s)
{
os << s.getTitle();
return os;
}
bool Comparer(const stockTest& f1, const stockTest& f2)
{
return f1.getTitle() < f2.getTitle();
}
using namespace std;
int main()
{
stockTest s1[] = {stockTest("abc"), stockTest("123"), stockTest("456")};
stockTest s2[] = {stockTest("123"), stockTest("Joe"), stockTest("789"), stockTest("456")};
std::sort(s1, s1 + 3, Comparer);
std::sort(s2, s2 + 4, Comparer);
std::vector<stockTest> v_intersection;
std::set_intersection(s1, s1 + 3, s2, s2 + 4, std::back_inserter(v_intersection), Comparer);
cout << "The similar names are: " << endl;
copy(v_intersection.begin(), v_intersection.end(), ostream_iterator<stockTest>(cout, "\n"));
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8aXRlcmF0b3I+CiNpbmNsdWRlIDxzdHJpbmc+CiNpbmNsdWRlIDxvc3RyZWFtPgoKc3RydWN0IHN0b2NrVGVzdAp7CglzdGQ6OnN0cmluZyB0aXRsZTsKCXN0ZDo6c3RyaW5nIGdldFRpdGxlKCkgY29uc3QgeyByZXR1cm4gdGl0bGU7IH0KCXN0b2NrVGVzdChjb25zdCBzdGQ6OnN0cmluZyBzKSA6IHRpdGxlKHMpIHt9CglmcmllbmQgc3RkOjpvc3RyZWFtJiBvcGVyYXRvciA8PCAoc3RkOjpvc3RyZWFtJiBvcywgY29uc3Qgc3RvY2tUZXN0Jik7Cn07CgpzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yIDw8IChzdGQ6Om9zdHJlYW0mIG9zLCBjb25zdCBzdG9ja1Rlc3QmIHMpCnsKCW9zIDw8IHMuZ2V0VGl0bGUoKTsKCXJldHVybiBvczsKfQoKYm9vbCBDb21wYXJlcihjb25zdCBzdG9ja1Rlc3QmIGYxLCBjb25zdCBzdG9ja1Rlc3QmIGYyKQp7CglyZXR1cm4gZjEuZ2V0VGl0bGUoKSA8IGYyLmdldFRpdGxlKCk7Cn0KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbWFpbigpCnsKCXN0b2NrVGVzdCBzMVtdID0ge3N0b2NrVGVzdCgiYWJjIiksIHN0b2NrVGVzdCgiMTIzIiksIHN0b2NrVGVzdCgiNDU2Iil9OwoJc3RvY2tUZXN0IHMyW10gPSB7c3RvY2tUZXN0KCIxMjMiKSwgc3RvY2tUZXN0KCJKb2UiKSwgc3RvY2tUZXN0KCI3ODkiKSwgc3RvY2tUZXN0KCI0NTYiKX07CglzdGQ6OnNvcnQoczEsIHMxICsgMywgQ29tcGFyZXIpOwoJc3RkOjpzb3J0KHMyLCBzMiArIDQsIENvbXBhcmVyKTsKCXN0ZDo6dmVjdG9yPHN0b2NrVGVzdD4gdl9pbnRlcnNlY3Rpb247CglzdGQ6OnNldF9pbnRlcnNlY3Rpb24oczEsIHMxICsgMywgczIsIHMyICsgNCwgc3RkOjpiYWNrX2luc2VydGVyKHZfaW50ZXJzZWN0aW9uKSwgQ29tcGFyZXIpOwoJY291dCA8PCAiVGhlIHNpbWlsYXIgbmFtZXMgYXJlOiAiIDw8IGVuZGw7Cgljb3B5KHZfaW50ZXJzZWN0aW9uLmJlZ2luKCksIHZfaW50ZXJzZWN0aW9uLmVuZCgpLCBvc3RyZWFtX2l0ZXJhdG9yPHN0b2NrVGVzdD4oY291dCwgIlxuIikpOwp9