#include <algorithm> // for std::set_difference(), std::sort()
#include <iostream> // for std::cout, std::endl
#include <iterator> // for std::inserter
#include <string> // for std::string
#include <vector> // for std::vector
using namespace std;
void print(const char* name, const vector<string>& v);
int main()
{
// Input vectors
vector<string> a = {"the", "of"};
vector<string> b = {"oranges", "the", "of", "apples"};
print("a", a);
print("b", b);
// Sort the vectors before calling std::set_difference().
sort(a.begin(), a.end());
sort(b.begin(), b.end());
// Resulting difference vector
vector<string> c;
set_difference(a.begin(), a.end(),
b.begin(), b.end(),
inserter(c, c.begin()));
print("difference(a,b)", c);
}
void print(const char* name, const vector<string>& v)
{
cout << name << " = {";
bool first = true;
for (const auto& s : v)
{
if (first)
{
first = false;
cout << s;
}
else
{
cout << ", " << s;
}
}
cout << "}" << endl;
}
I2luY2x1ZGUgPGFsZ29yaXRobT4gICAgLy8gZm9yIHN0ZDo6c2V0X2RpZmZlcmVuY2UoKSwgc3RkOjpzb3J0KCkKI2luY2x1ZGUgPGlvc3RyZWFtPiAgICAgLy8gZm9yIHN0ZDo6Y291dCwgc3RkOjplbmRsCiNpbmNsdWRlIDxpdGVyYXRvcj4gICAgIC8vIGZvciBzdGQ6Omluc2VydGVyCiNpbmNsdWRlIDxzdHJpbmc+ICAgICAgIC8vIGZvciBzdGQ6OnN0cmluZwojaW5jbHVkZSA8dmVjdG9yPiAgICAgICAvLyBmb3Igc3RkOjp2ZWN0b3IKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnZvaWQgcHJpbnQoY29uc3QgY2hhciogbmFtZSwgY29uc3QgdmVjdG9yPHN0cmluZz4mIHYpOwoKaW50IG1haW4oKSAKewogICAgLy8gSW5wdXQgdmVjdG9ycwogICAgdmVjdG9yPHN0cmluZz4gYSA9IHsidGhlIiwgIm9mIn07CiAgICB2ZWN0b3I8c3RyaW5nPiBiID0geyJvcmFuZ2VzIiwgInRoZSIsICJvZiIsICJhcHBsZXMifTsKICAgIAogICAgcHJpbnQoImEiLCBhKTsKICAgIHByaW50KCJiIiwgYik7CgogICAgLy8gU29ydCB0aGUgdmVjdG9ycyBiZWZvcmUgY2FsbGluZyBzdGQ6OnNldF9kaWZmZXJlbmNlKCkuCiAgICBzb3J0KGEuYmVnaW4oKSwgYS5lbmQoKSk7CiAgICBzb3J0KGIuYmVnaW4oKSwgYi5lbmQoKSk7CiAgICAKICAgIC8vIFJlc3VsdGluZyBkaWZmZXJlbmNlIHZlY3RvcgogICAgdmVjdG9yPHN0cmluZz4gYzsKICAgIHNldF9kaWZmZXJlbmNlKGEuYmVnaW4oKSwgYS5lbmQoKSwKICAgICAgICAgICAgICAgICAgIGIuYmVnaW4oKSwgYi5lbmQoKSwKICAgICAgICAgICAgICAgICAgIGluc2VydGVyKGMsIGMuYmVnaW4oKSkpOwogICAgICAgICAgICAgICAgICAgCiAgICBwcmludCgiZGlmZmVyZW5jZShhLGIpIiwgYyk7Cn0KCgp2b2lkIHByaW50KGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IHZlY3RvcjxzdHJpbmc+JiB2KSAKewogICAgY291dCA8PCBuYW1lIDw8ICIgPSB7IjsKICAgIGJvb2wgZmlyc3QgPSB0cnVlOwogICAgZm9yIChjb25zdCBhdXRvJiBzIDogdikgCiAgICB7CiAgICAgICAgaWYgKGZpcnN0KSAKICAgICAgICB7CiAgICAgICAgICAgIGZpcnN0ID0gZmFsc2U7CiAgICAgICAgICAgIGNvdXQgPDwgczsKICAgICAgICB9IAogICAgICAgIGVsc2UgCiAgICAgICAgewogICAgICAgICAgICBjb3V0IDw8ICIsICIgPDwgczsKICAgICAgICB9CiAgICB9CiAgICBjb3V0IDw8ICJ9IiA8PCBlbmRsOwp9Cg==