#include <iostream>
#include <map>
#include <vector>
template <typename KEY, typename VALUE>
std::vector<VALUE>
collect_absents(const std::map<KEY, VALUE>& map, const std::vector<KEY>& present)
{
std::vector<VALUE> res;
auto mit = map.begin();
auto vit = present.begin();
while (mit != map.end() && vit != present.end())
{
if (*vit < mit->first) {
++vit;
} else if (mit->first < *vit) {
res.push_back(mit->second);
++mit;
} else { // equal
++vit;
++mit;
}
}
for (; mit != map.end(); ++mit) {
res.push_back(mit->second);
}
return res;
}
int main()
{
std::map<int, int> myMap = {{1,2},{2,9},{3,5},{4,7}};
std::vector<int> present = {1,3};
for (auto e : collect_absents(myMap, present))
{
std::cout << e << " ";
}
std::cout << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWFwPgojaW5jbHVkZSA8dmVjdG9yPgoKdGVtcGxhdGUgPHR5cGVuYW1lIEtFWSwgdHlwZW5hbWUgVkFMVUU+CnN0ZDo6dmVjdG9yPFZBTFVFPgpjb2xsZWN0X2Fic2VudHMoY29uc3Qgc3RkOjptYXA8S0VZLCBWQUxVRT4mIG1hcCwgY29uc3Qgc3RkOjp2ZWN0b3I8S0VZPiYgcHJlc2VudCkKewogICAgc3RkOjp2ZWN0b3I8VkFMVUU+IHJlczsKICAgIAogICAgYXV0byBtaXQgPSBtYXAuYmVnaW4oKTsKICAgIGF1dG8gdml0ID0gcHJlc2VudC5iZWdpbigpOwogICAgCiAgICB3aGlsZSAobWl0ICE9IG1hcC5lbmQoKSAmJiB2aXQgIT0gcHJlc2VudC5lbmQoKSkKICAgIHsKICAgICAgICBpZiAoKnZpdCA8IG1pdC0+Zmlyc3QpIHsKICAgICAgICAgICAgKyt2aXQ7ICAgCiAgICAgICAgfSBlbHNlIGlmIChtaXQtPmZpcnN0IDwgKnZpdCkgewogICAgICAgICAgICByZXMucHVzaF9iYWNrKG1pdC0+c2Vjb25kKTsKICAgICAgICAgICAgKyttaXQ7ICAgCiAgICAgICAgfSBlbHNlIHsgLy8gZXF1YWwKICAgICAgICAgICAgKyt2aXQ7CiAgICAgICAgICAgICsrbWl0OwogICAgICAgIH0KICAgIH0KICAgIGZvciAoOyBtaXQgIT0gbWFwLmVuZCgpOyArK21pdCkgewogICAgICAgIHJlcy5wdXNoX2JhY2sobWl0LT5zZWNvbmQpOwogICAgfQogICAgcmV0dXJuIHJlczsKfQoKCmludCBtYWluKCkKewogICAgc3RkOjptYXA8aW50LCBpbnQ+IG15TWFwID0ge3sxLDJ9LHsyLDl9LHszLDV9LHs0LDd9fTsKICAgIHN0ZDo6dmVjdG9yPGludD4gcHJlc2VudCA9IHsxLDN9OwogICAgZm9yIChhdXRvIGUgOiBjb2xsZWN0X2Fic2VudHMobXlNYXAsIHByZXNlbnQpKQogICAgewogICAgICAgIHN0ZDo6Y291dCA8PCBlIDw8ICIgIjsKICAgIH0KICAgIHN0ZDo6Y291dCA8PCBzdGQ6OmVuZGw7Cn0K