std :: set <pair <int,int>&gt;的性能有何不同?和std :: map <int,int>

时间:2016-07-17 08:13:36

标签: c++ dictionary stl set

我想在一些容器中存储大量对(大约10 ^ 7对)。我想要执行的操作只有insertfind

由于我们可以使用std::setstd::map来存储对,我想知道哪个容器在速度方面更好。我搜索了类似的问题,但没有找到答案。所以请有人回答我的问题......

1 个答案:

答案 0 :(得分:1)

std::pair<int, int>运算符少于第二个值之间的差异(因此它将在std::set<std::pair<int, int>>中使用),而std::map对第二个值不执行任何操作。结果意味着:

std::map<int, int> m;
std::set<std::pair<int, int> > s;
m.insert(std::make_pair(0, 0));
m.insert(std::make_pair(0, 1)); // it won't be inserted as key is duplicated
s.insert(std::make_pair(0, 0));
s.insert(std::make_pair(0, 1)); // it will be inserted

更新:在大多数STL实现中setmap实现是相同的(平衡RB树,通常setmap来自相同的模板基类) ,在你的情况下,只是使用较少的运算符的方式将是差异。