各値が何回発生するかをカウントします。一度発生する値のみを出力します。
#include <unordered_map>
#include <vector>
#include <iterator>
#include <iostream>
template<typename InputIterator, typename OutputIterator>
void
uniq (InputIterator b0, InputIterator e0,
InputIterator b1, InputIterator e1,
OutputIterator u)
{
std::unordered_map<typename std::iterator_traits<InputIterator>::value_type, int> m;
while (b0 != e0)
++m [*b0++];
while (b1 != e1)
++m [*b1++];
for (auto &mi : m)
{
if (mi.second == 1)
*u++ = mi.first;
}
}
int
main()
{
std::vector<int> s0 ({1, 4, 5});
std::vector<int> s1 ({1, 3, 5, 6});
std::vector<int> r;
uniq (s0.begin(), s0.end(), s1.begin(), s1.end(), std::back_inserter (r));
for (auto i : r)
std::cout << i << " ";
}