#include <algorithm>
#include <iostream>
#include <string>
#include <vector>
//#include <QtCore>
int main()
{
// prepare sample data
//typedef QPair<std::string, double> Pair;
typedef std::pair<std::string, double> Pair;
Pair
a("Hello", 1.23),
b("World", 2.34),
c("Stack", 3.45),
d("Overflow", 4.56),
e("C++11", 5.67),
f("C++14", 6.78),
g("C++17", 7.89),
h("C++20", 8.90),
i("gin hill", 10.1),
j("scheff", 0.0);
std::vector<Pair> vec1({ a, b });
std::vector<Pair> vec2({ c, d, a, e, h });
std::vector<Pair> vec3({ i, j, a });
// sort vectors
std::sort(vec1.begin(), vec1.end());
std::sort(vec2.begin(), vec2.end());
std::sort(vec3.begin(), vec3.end());
// intersect vectors
std::vector<Pair> isect12;
std::set_intersection(
vec1.begin(), vec1.end(), vec2.begin(), vec2.end(),
std::back_inserter(isect12));
std::vector<Pair> isect123;
std::set_intersection(
isect12.begin(), isect12.end(), vec3.begin(), vec3.end(),
std::back_inserter(isect123));
// report
const size_t n = isect123.size();
std::cout << "Intersection contains " << n << " elements"
<< (n ? ':' : '.') << '\n';
for (size_t i = 0; i < n; ++i) {
const Pair &entry = isect123[i];
std::cout << (i + 1) << ".: '" << entry.first
<< "', " << entry.second << '\n';
}
// done
return 0;
}
I2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dmVjdG9yPgoKLy8jaW5jbHVkZSA8UXRDb3JlPgoKaW50IG1haW4oKQp7CiAgLy8gcHJlcGFyZSBzYW1wbGUgZGF0YQogIC8vdHlwZWRlZiBRUGFpcjxzdGQ6OnN0cmluZywgZG91YmxlPiBQYWlyOwogIHR5cGVkZWYgc3RkOjpwYWlyPHN0ZDo6c3RyaW5nLCBkb3VibGU+IFBhaXI7CiAgUGFpcgogICAgYSgiSGVsbG8iLCAxLjIzKSwKICAgIGIoIldvcmxkIiwgMi4zNCksCiAgICBjKCJTdGFjayIsIDMuNDUpLAogICAgZCgiT3ZlcmZsb3ciLCA0LjU2KSwKICAgIGUoIkMrKzExIiwgNS42NyksCiAgICBmKCJDKysxNCIsIDYuNzgpLAogICAgZygiQysrMTciLCA3Ljg5KSwKICAgIGgoIkMrKzIwIiwgOC45MCksCiAgICBpKCJnaW4gaGlsbCIsIDEwLjEpLAogICAgaigic2NoZWZmIiwgMC4wKTsKICBzdGQ6OnZlY3RvcjxQYWlyPiB2ZWMxKHsgYSwgYiB9KTsKICBzdGQ6OnZlY3RvcjxQYWlyPiB2ZWMyKHsgYywgZCwgYSwgZSwgaCB9KTsKICBzdGQ6OnZlY3RvcjxQYWlyPiB2ZWMzKHsgaSwgaiwgYSB9KTsKICAvLyBzb3J0IHZlY3RvcnMKICBzdGQ6OnNvcnQodmVjMS5iZWdpbigpLCB2ZWMxLmVuZCgpKTsKICBzdGQ6OnNvcnQodmVjMi5iZWdpbigpLCB2ZWMyLmVuZCgpKTsKICBzdGQ6OnNvcnQodmVjMy5iZWdpbigpLCB2ZWMzLmVuZCgpKTsKICAvLyBpbnRlcnNlY3QgdmVjdG9ycwogIHN0ZDo6dmVjdG9yPFBhaXI+IGlzZWN0MTI7CiAgc3RkOjpzZXRfaW50ZXJzZWN0aW9uKAogICAgdmVjMS5iZWdpbigpLCB2ZWMxLmVuZCgpLCB2ZWMyLmJlZ2luKCksIHZlYzIuZW5kKCksCiAgICBzdGQ6OmJhY2tfaW5zZXJ0ZXIoaXNlY3QxMikpOwogIHN0ZDo6dmVjdG9yPFBhaXI+IGlzZWN0MTIzOwogIHN0ZDo6c2V0X2ludGVyc2VjdGlvbigKICAgIGlzZWN0MTIuYmVnaW4oKSwgaXNlY3QxMi5lbmQoKSwgdmVjMy5iZWdpbigpLCB2ZWMzLmVuZCgpLAogICAgc3RkOjpiYWNrX2luc2VydGVyKGlzZWN0MTIzKSk7CiAgLy8gcmVwb3J0CiAgY29uc3Qgc2l6ZV90IG4gPSBpc2VjdDEyMy5zaXplKCk7CiAgc3RkOjpjb3V0IDw8ICJJbnRlcnNlY3Rpb24gY29udGFpbnMgIiA8PCBuIDw8ICIgZWxlbWVudHMiCiAgICA8PCAobiA/ICc6JyA6ICcuJykgPDwgJ1xuJzsKICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG47ICsraSkgewogICAgY29uc3QgUGFpciAmZW50cnkgPSBpc2VjdDEyM1tpXTsKICAgIHN0ZDo6Y291dCA8PCAoaSArIDEpIDw8ICIuOiAnIiA8PCBlbnRyeS5maXJzdAogICAgICA8PCAiJywgIiA8PCBlbnRyeS5zZWNvbmQgPDwgJ1xuJzsKICB9CiAgLy8gZG9uZQogIHJldHVybiAwOwp9