#include <iostream>
#include <vector>
#include <set>
#include <algorithm>

using namespace std;

int main() {
    vector<int> v = { 1, 1, 2, 3, 4, 4, 4, 5 };
    std::set<int> set(v.begin(), v.end());
    v.erase(
        std::remove_if(
            v.begin(), 
            v.end(), 
            [&set] (int item) { return !set.erase(item); }), 
        v.end());

    // print the results -- sadly no range-based for available on ideone
    for (auto i = v.begin(); i != v.end(); ++i) {
        cout << *i << " ";
    }
    
    
    return 0;
}