我可以将元素插入到地图的给定迭代器中吗?

时间:2015-12-03 20:12:35

标签: c++ c++11

我有std::map。我找到了键的下限,并确保键未在地图中使用。我可以将一个元素插入给定的地图迭代器吗?如果是这样的话?

map<int, double> m;
int key = 1;
auto itr = m.lower_bound(key);
if (itr == m.end() || itr->first != key)
    m.insert(itr, make_pair(key, 3.14)); // how is the performance? Any better way?

2 个答案:

答案 0 :(得分:3)

关联容器要求说明emplace_hint和相关操作,复杂性一般是对数,但如果在p&#34;之前插入元素,则摊销常数。 (其中p是提示迭代器)。

因此,如果您只使用正确的提示,那么复杂性是摊销 - 常数,与地图的大小无关。 (当然,您仍需要执行初始查找的成本。)

答案 1 :(得分:1)

&#34;暗示&#34;的想法版本insert()是地图可以传递的迭代器作为对象可能去向的指示。如果在p之前插入t,则可以保证性能是平均值。&#34; (其中p是提示迭代器)。

如果值构造起来相当便宜,建议直接使用m.insert(std::make_pair(key, 3.14)):如果insert()失败,则元素保持不变。该函数返回std::pair<iterator, bool>,其中first元素指向新插入的元素,second元素指示节点是否已插入。