映射插入(const_iterator提示,值)用法

时间:2018-07-06 02:09:21

标签: c++

我正在浏览 cppreference map insert operation 并找到一种用法:

iterator insert( const_iterator hint, const value_type& value ); //(since C++11)
  

hint:迭代到新元素将在其之前的位置   插入(自C ++ 11起)

我知道mapset在内部进行了排序,因此“在提示后插入”的用法如何工作?

测试代码:

#include <set>
using namespace std;
int main()
{
    set<int> foo = { 9,2,4,8,0 }; //0,2,4,8,9
    //foo.insert(-1); //-1,0,2,4,8,9

    const auto pos = foo.find(4);
    foo.insert(pos, -1); //I expected to get 0,2,4,-1,8,9
                        //(unreasonable since map should be always sorted but that's how I understand the function usage)
                       // And I got -1,0,2,4,8,9  same result as insert(value)

}

insert(const_iterator hint, value)如何工作?

1 个答案:

答案 0 :(得分:2)

您传递的迭代器“只是”一个提示,这意味着如果提示不正确,该函数将在常规插入时回退。

如果提示正确,则插入将按摊销的固定时间进行,但如果输入错误,则插入图或集合的大小将为对数。

要了解如何在llvm stdlib中完成此操作:https://github.com/llvm-mirror/libcxx/blob/master/include/map