#include <vector>
#include <string>
#include <algorithm>
#include <iterator>
#include <iostream>
using namespace std;
vector<string> function(vector<string> sequences, vector<string> second_sequences)
{
// sort the sequences
sort(sequences.begin(), sequences.end());
sort(second_sequences.begin(), second_sequences.end());
vector<string> samestrings;
vector<string> diffstrings;
// get the strings that are the same
set_intersection(sequences.begin(), sequences.end(), second_sequences.begin(), second_sequences.end(), std::back_inserter(samestrings));
// get the strings that are mismatched
set_symmetric_difference(sequences.begin(), sequences.end(), second_sequences.begin(), second_sequences.end(), std::back_inserter(diffstrings));
// output the results
cout << "Same strings:" << "\n";
copy(samestrings.begin(), samestrings.end(), ostream_iterator<string>(cout, " "));
cout << "\nMismatch strings:" << "\n";
copy(diffstrings.begin(), diffstrings.end(), ostream_iterator<string>(cout, " "));
return diffstrings;
}
int main()
{
const char *p1[] = {"abc", "123", "456", "diff", "same"};
const char *p2[] = {"123", "diff2", "456", "same", "abc"};
vector<string> s1(p1, p1 + 5);
vector<string> s2(p2, p2 + 5);
function(s1, s2);
}
I2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGl0ZXJhdG9yPgojaW5jbHVkZSA8aW9zdHJlYW0+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdmVjdG9yPHN0cmluZz4gZnVuY3Rpb24odmVjdG9yPHN0cmluZz4gc2VxdWVuY2VzLCB2ZWN0b3I8c3RyaW5nPiBzZWNvbmRfc2VxdWVuY2VzKQp7CiAgICAvLyBzb3J0IHRoZSBzZXF1ZW5jZXMKICAgIHNvcnQoc2VxdWVuY2VzLmJlZ2luKCksIHNlcXVlbmNlcy5lbmQoKSk7CiAgICBzb3J0KHNlY29uZF9zZXF1ZW5jZXMuYmVnaW4oKSwgc2Vjb25kX3NlcXVlbmNlcy5lbmQoKSk7CiAgICB2ZWN0b3I8c3RyaW5nPiBzYW1lc3RyaW5nczsKICAgIHZlY3RvcjxzdHJpbmc+IGRpZmZzdHJpbmdzOwoKICAgIC8vIGdldCB0aGUgc3RyaW5ncyB0aGF0IGFyZSB0aGUgc2FtZQogICAgc2V0X2ludGVyc2VjdGlvbihzZXF1ZW5jZXMuYmVnaW4oKSwgc2VxdWVuY2VzLmVuZCgpLCBzZWNvbmRfc2VxdWVuY2VzLmJlZ2luKCksIHNlY29uZF9zZXF1ZW5jZXMuZW5kKCksIHN0ZDo6YmFja19pbnNlcnRlcihzYW1lc3RyaW5ncykpOwoKICAgIC8vIGdldCB0aGUgc3RyaW5ncyB0aGF0IGFyZSBtaXNtYXRjaGVkCiAgICBzZXRfc3ltbWV0cmljX2RpZmZlcmVuY2Uoc2VxdWVuY2VzLmJlZ2luKCksIHNlcXVlbmNlcy5lbmQoKSwgc2Vjb25kX3NlcXVlbmNlcy5iZWdpbigpLCBzZWNvbmRfc2VxdWVuY2VzLmVuZCgpLCBzdGQ6OmJhY2tfaW5zZXJ0ZXIoZGlmZnN0cmluZ3MpKTsKCiAgICAvLyBvdXRwdXQgdGhlIHJlc3VsdHMKICAgIGNvdXQgPDwgIlNhbWUgc3RyaW5nczoiIDw8ICJcbiI7CiAgICBjb3B5KHNhbWVzdHJpbmdzLmJlZ2luKCksIHNhbWVzdHJpbmdzLmVuZCgpLCBvc3RyZWFtX2l0ZXJhdG9yPHN0cmluZz4oY291dCwgIiAiKSk7CiAgICBjb3V0IDw8ICJcbk1pc21hdGNoIHN0cmluZ3M6IiA8PCAiXG4iOwogICAgY29weShkaWZmc3RyaW5ncy5iZWdpbigpLCBkaWZmc3RyaW5ncy5lbmQoKSwgb3N0cmVhbV9pdGVyYXRvcjxzdHJpbmc+KGNvdXQsICIgIikpOwogICAgcmV0dXJuIGRpZmZzdHJpbmdzOwp9CgoKaW50IG1haW4oKQp7CiAgICBjb25zdCBjaGFyICpwMVtdID0geyJhYmMiLCAiMTIzIiwgIjQ1NiIsICJkaWZmIiwgInNhbWUifTsKICAgIGNvbnN0IGNoYXIgKnAyW10gPSB7IjEyMyIsICJkaWZmMiIsICI0NTYiLCAic2FtZSIsICJhYmMifTsKICAgIHZlY3RvcjxzdHJpbmc+IHMxKHAxLCBwMSArIDUpOwogICAgdmVjdG9yPHN0cmluZz4gczIocDIsIHAyICsgNSk7CiAgICBmdW5jdGlvbihzMSwgczIpOwp9