📅  最后修改于: 2023-12-03 15:13:44.941000             🧑  作者: Mango
在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
}