// g++ -std=c++14 -pedantic -pthread main.cpp
// output: 1 2 3 4 5 1 1 1
#include <algorithm>
#include <vector>
#include <functional>
#include <iterator>
#include <iostream>
int main()
{
std::vector<int> a = { 1, 2, 3, 2, 4, 5, 1, 1, 3, 5, 1, 5 }, b = { 2, 5, 5, 3 }, c;
std::copy_if(a.begin(), a.end(), std::back_inserter(c),
std::bind(std::less<>(), // this won't work in pre-C++14
std::bind(
std::count<std::vector<int>::iterator, int>,
std::bind(static_cast<std::vector<int>::iterator (std::vector<int>::*)()>(&std::vector<int>::begin), &c),
std::bind(static_cast<std::vector<int>::iterator (std::vector<int>::*)()>(&std::vector<int>::end), &c),
std::placeholders::_1
),
std::bind(
std::minus<>(), // this won't work in pre-C++14
std::bind(
std::count<std::vector<int>::iterator, int>,
a.begin(),
a.end(),
std::placeholders::_1
),
std::bind(
std::count<std::vector<int>::iterator, int>,
b.begin(),
b.end(),
std::placeholders::_1
)
)
)
);
std::copy(c.begin(), c.end(), std::ostream_iterator<int>(std::cout, " "));
std::cout << std::endl;
}
Ly8gZysrIC1zdGQ9YysrMTQgLXBlZGFudGljIC1wdGhyZWFkIG1haW4uY3BwCi8vIG91dHB1dDogMSAyIDMgNCA1IDEgMSAxIAojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KI2luY2x1ZGUgPGl0ZXJhdG9yPgojaW5jbHVkZSA8aW9zdHJlYW0+CgppbnQgbWFpbigpCnsKICBzdGQ6OnZlY3RvcjxpbnQ+IGEgPSB7IDEsIDIsIDMsIDIsIDQsIDUsIDEsIDEsIDMsIDUsIDEsIDUgfSwgYiA9IHsgMiwgNSwgNSwgMyB9LCBjOwoKICBzdGQ6OmNvcHlfaWYoYS5iZWdpbigpLCBhLmVuZCgpLCBzdGQ6OmJhY2tfaW5zZXJ0ZXIoYyksIAogICAgc3RkOjpiaW5kKHN0ZDo6bGVzczw+KCksICAgLy8gdGhpcyB3b24ndCB3b3JrIGluIHByZS1DKysxNAogICAgICBzdGQ6OmJpbmQoCiAgICAgICAgc3RkOjpjb3VudDxzdGQ6OnZlY3RvcjxpbnQ+OjppdGVyYXRvciwgaW50PiwgCiAgICAgICAgICBzdGQ6OmJpbmQoc3RhdGljX2Nhc3Q8c3RkOjp2ZWN0b3I8aW50Pjo6aXRlcmF0b3IgKHN0ZDo6dmVjdG9yPGludD46OiopKCk+KCZzdGQ6OnZlY3RvcjxpbnQ+OjpiZWdpbiksICZjKSwgCiAgICAgICAgICBzdGQ6OmJpbmQoc3RhdGljX2Nhc3Q8c3RkOjp2ZWN0b3I8aW50Pjo6aXRlcmF0b3IgKHN0ZDo6dmVjdG9yPGludD46OiopKCk+KCZzdGQ6OnZlY3RvcjxpbnQ+OjplbmQpLCAmYyksIAogICAgICAgICAgc3RkOjpwbGFjZWhvbGRlcnM6Ol8xCiAgICAgICksCiAgICAgIHN0ZDo6YmluZCgKICAgICAgICBzdGQ6Om1pbnVzPD4oKSwgLy8gdGhpcyB3b24ndCB3b3JrIGluIHByZS1DKysxNAogICAgICAgICAgc3RkOjpiaW5kKAogICAgICAgICAgICBzdGQ6OmNvdW50PHN0ZDo6dmVjdG9yPGludD46Oml0ZXJhdG9yLCBpbnQ+LCAKICAgICAgICAgICAgICBhLmJlZ2luKCksIAogICAgICAgICAgICAgIGEuZW5kKCksIAogICAgICAgICAgICAgIHN0ZDo6cGxhY2Vob2xkZXJzOjpfMQogICAgICAgICAgKSwKICAgICAgICAgIHN0ZDo6YmluZCgKICAgICAgICAgICAgc3RkOjpjb3VudDxzdGQ6OnZlY3RvcjxpbnQ+OjppdGVyYXRvciwgaW50PiwgCiAgICAgICAgICAgICAgYi5iZWdpbigpLCAKICAgICAgICAgICAgICBiLmVuZCgpLCAKICAgICAgICAgICAgICBzdGQ6OnBsYWNlaG9sZGVyczo6XzEKICAgICAgICAgICkKICAgICAgKQogICAgKQogICk7CgogIHN0ZDo6Y29weShjLmJlZ2luKCksIGMuZW5kKCksIHN0ZDo6b3N0cmVhbV9pdGVyYXRvcjxpbnQ+KHN0ZDo6Y291dCwgIiAiKSk7CiAgc3RkOjpjb3V0IDw8IHN0ZDo6ZW5kbDsKfQ==