我正在浏览 cppreference map insert operation 并找到一种用法:
iterator insert( const_iterator hint, const value_type& value ); //(since C++11)
hint:迭代到新元素将在其之前的位置 插入(自C ++ 11起)
我知道map
和set
在内部进行了排序,因此“在提示后插入”的用法如何工作?
测试代码:
#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)
如何工作?
答案 0 :(得分:2)
您传递的迭代器“只是”一个提示,这意味着如果提示不正确,该函数将在常规插入时回退。
如果提示正确,则插入将按摊销的固定时间进行,但如果输入错误,则插入图或集合的大小将为对数。
要了解如何在llvm stdlib中完成此操作:https://github.com/llvm-mirror/libcxx/blob/master/include/map