要使用std::set对std::vector进行去重操作,您可以将向量中的元素插入到集合中,因为std::set会自动去除重复元素。然后,您可以将集合中的元素重新存回向量中。以下是一个示例代码,演示如何使用std::set对std::vector进行去重:

set ——排序去重

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

int main()
{
    std::vector<int> numbers = {1, 2, 3, 2, 4, 3, 5, 6, 4};
    std::cout << "去重前的 numbers: ";
    for (auto i : numbers)
    {
        std::cout << i << " ";
    }
    std::cout << std::endl;
    // 定义一个set ,将numbers数据赋值给set,set会自动去重,并排序,如果不想排序,就使用 unordered_set
    std::set<int>  uniquenumbers(numbers.begin(), numbers.end());
    std::cout << "uniquenumbers: ";
    for (auto i : uniquenumbers)
    {
        std::cout << i << " ";
    }
    std::cout << std::endl;
    numbers.assign(uniquenumbers.begin(), uniquenumbers.end());
    std::cout << "去重后的 numbers: ";
    for (auto i : numbers)
    {
        std::cout << i << " ";
    }
    std::cout << std::endl;

    return 0;
}

运行此代码将输出:

力扣C++学习笔记——C++ 给vector去重_重复元素

即去除重复元素后的向量。

在这个示例中,我们首先将向量中的元素插入到std::set中,由于std::set会自动去除重复元素,所以集合中的元素就是去重后的结果。然后,我们使用assign函数将集合中的元素重新存回向量中,覆盖原有的元素。最后,我们遍历输出去重后的向量。

unordered_set ——不排序去重

请注意,使用std::set进行去重会导致元素的顺序发生改变,因为std::set会自动对元素进行排序。如果您需要保留原始向量中的元素顺序,可以考虑使用std::unordered_set代替std::set,但是请注意std::unordered_set不会对元素进行排序。

#include <iostream>
#include <vector>
#include <set>
#include <unordered_set>
int main() {
    std::vector<int> numbers = { 1, 2, 3, 2, 4, 3, 5, 6, 4 };

    // 使用std::set对向量进行去重
    std::unordered_set<int> uniqueNumbers(numbers.begin(), numbers.end());

    // 将去重后的元素存回向量
    numbers.assign(uniqueNumbers.begin(), uniqueNumbers.end());

    // 输出去重后的向量
    for (const auto& num : numbers) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    return 0;
}

但是会发现 ,unordered_set 赋值后,每次插入值都是插入到了开头。

力扣C++学习笔记——C++ 给vector去重_#include_02