#include <map>
#include <vector>
#include <iostream>
#include <algorithm>
#include <iterator>
using namespace std;
std::vector<int> lonelyinteger(const std::vector<int>& a)
{
std::vector<int> retValue;
typedef std::map<int, int> IntMap;
IntMap theMap;
// build the map
for_each(a.begin(), a.end(), [&](int n){ theMap[n]++; });
// find all first entry with a count of 1
for_each(theMap.begin(), theMap.end(),
[&](const IntMap::value_type& pr)
{if (pr.second == 1) retValue.push_back(pr.first); });
return retValue;
}
int main()
{
std::vector<int> TestVect = { 1, 1, 2, 3, 5, 0, 2, 8 };
std::vector<int> ans = lonelyinteger(TestVect);
copy(ans.begin(), ans.end(), ostream_iterator<int>(cout," "));
}
ICAgICNpbmNsdWRlIDxtYXA+CiAgICAjaW5jbHVkZSA8dmVjdG9yPgogICAgI2luY2x1ZGUgPGlvc3RyZWFtPgogICAgI2luY2x1ZGUgPGFsZ29yaXRobT4KICAgICNpbmNsdWRlIDxpdGVyYXRvcj4KCiAgICB1c2luZyBuYW1lc3BhY2Ugc3RkOwogICAgCiAgICBzdGQ6OnZlY3RvcjxpbnQ+IGxvbmVseWludGVnZXIoY29uc3Qgc3RkOjp2ZWN0b3I8aW50PiYgYSkgCiAgICB7CiAgICAgICAgc3RkOjp2ZWN0b3I8aW50PiByZXRWYWx1ZTsKICAgICAgICB0eXBlZGVmIHN0ZDo6bWFwPGludCwgaW50PiBJbnRNYXA7CiAgICAgICAgSW50TWFwIHRoZU1hcDsgIAoKICAgICAgICAvLyBidWlsZCB0aGUgbWFwCiAgICAJZm9yX2VhY2goYS5iZWdpbigpLCBhLmVuZCgpLCBbJl0oaW50IG4peyB0aGVNYXBbbl0rKzsgfSk7CgogICAgICAgIC8vIGZpbmQgYWxsIGZpcnN0IGVudHJ5IHdpdGggYSBjb3VudCBvZiAxCiAgICAgICAgZm9yX2VhY2godGhlTWFwLmJlZ2luKCksIHRoZU1hcC5lbmQoKSwKICAgICAgICAgICBbJl0oY29uc3QgSW50TWFwOjp2YWx1ZV90eXBlJiBwcikKICAgICAgICAgICAgICAgIHtpZiAocHIuc2Vjb25kID09IDEpIHJldFZhbHVlLnB1c2hfYmFjayhwci5maXJzdCk7IH0pOwogICAgICAgIHJldHVybiByZXRWYWx1ZTsKICAgIH0KICAgIAogICAgaW50IG1haW4oKQogICAgewogICAgCXN0ZDo6dmVjdG9yPGludD4gVGVzdFZlY3QgPSB7IDEsIDEsIDIsIDMsIDUsIDAsIDIsIDggfTsKICAgIAlzdGQ6OnZlY3RvcjxpbnQ+IGFucyA9IGxvbmVseWludGVnZXIoVGVzdFZlY3QpOwogICAgICAgIGNvcHkoYW5zLmJlZ2luKCksIGFucy5lbmQoKSwgb3N0cmVhbV9pdGVyYXRvcjxpbnQ+KGNvdXQsIiAiKSk7IAogICAgfQoK