当然,您可以维护一个惟一项的向量,但是当您执行面向集合的操作时,您的性能会受到很大影响。例如,假设您有一组10000个项目和一个由10000个不同的无序项目组成的向量。现在假设您需要检查一个值 X 是否在集合中的值之中(或者在向量中的值之中)。当 X 不在其中时,搜索向量的速度会慢100倍左右。在计算集合联合和交叉点时,您会看到类似的性能差异。
简单的区别是 set 只能包含唯一的值,并且它是排序的。因此,在需要在每次插入/删除之后对值进行连续排序的情况下,可以使用它。
set<int> a;
vector<int> b;
for (int i = 0; i < 10; ++i)
{
int val = rand() % 10;
a.insert(val);
b.push_back(val);
}
cout << "--SET---\n"; for (auto i : a) cout << i << ","; cout << endl;
cout << "--VEC---\n"; for (auto j : b) cout << j << ","; cout << endl;