📜  C ++ STL中std :: set与std :: vector之间的区别(1)

📅  最后修改于: 2023-12-03 15:13:44.941000             🧑  作者: Mango

C++ STL中std::set与std::vector之间的区别

在C++的STL中,std::set和std::vector都是非常常用的容器类型。它们都能够存储数据,并且提供了许多有用的操作。然而,它们之间还是存在一些重要的区别。下面将重点介绍一下这些区别。

存储方式

std::vector是一个动态数组,它会在内存中连续存储元素。这种存储方式使得向量能够高效地通过下标访问元素,同时在末尾插入或删除元素也比较快速。

std::set是一个集合,它会以红黑树的形式存储元素。这种存储方式使得集合能够高效地插入、删除和查找元素。但是,由于元素的顺序是有序的,因此对于访问元素,集合的性能可能不如向量。

元素的唯一性

std::vector中的元素可以是重复的,而std::set中的元素必须是唯一的。如果想保证std::vector中的元素唯一,需要手动去重,比较麻烦。

排序

std::vector可以通过std::sort()进行排序。而std::set中的元素已经是有序的,因此不需要手动进行排序。

总结

总的来说,std::vector和std::set都有各自的优势和适用场景。如果需要高效地随机访问元素、在末尾插入或删除元素并且不需要对元素进行去重,那么使用std::vector可能更为合适。如果需要保证元素的唯一性,并且需要高效地进行插入、删除和查找操作,那么使用std::set可能更为合适。

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

int main() {
    std::vector<int> v {4, 1, 2, 3, 4, 5};
    for (auto i : v) {
        std::cout << i << " ";
    }
    // output: 4 1 2 3 4 5

    std::set<int> s {4, 1, 2, 3, 4, 5};
    for (auto i : s) {
        std::cout << i << " ";
    }
    // output: 1 2 3 4 5
}