Comment supprimer les doublons de std :: vector non triés tout en conservant la commande d'origine en utilisant des algorithmes?

J'ai un tableau d'entiers que j'ai besoin de supprimer les doublons tout en maintenant la commande de la première occurrence de chaque entier. Je peux voir faire comme cela, mais imaginer qu'il y est une meilleure manière qui rend l'utilisation des algorithmes de la STL mieux? L'insertion est hors de mon contrôle, je ne peux donc pas vérifier les doublons avant de l'insérer.

int unsortedRemoveDuplicates(std::vector<int> &numbers) {
    std::set<int> uniqueNumbers;
    std::vector<int>::iterator allItr = numbers.begin();
    std::vector<int>::iterator unique = allItr;
    std::vector<int>::iterator endItr = numbers.end();

    for (; allItr != endItr; ++allItr) {
        const bool isUnique = uniqueNumbers.insert(*allItr).second;

        if (isUnique) {
            *unique = *allItr;
            ++unique;
        }
    }

    const int duplicates = endItr - unique;

    numbers.erase(unique, endItr);
    return duplicates;
}

Comment cela peut être fait en utilisant des algorithmes de la STL?

source d'informationauteur WilliamKF | 2012-08-30