我看到std :: map和std :: unordered_map的insert方法将会从中更改
template<class P> std::pair<iterator,bool> insert(P&& value); (C++11)
至
std::pair<iterator,bool> insert(value_type&& value); (C++17)
但是,对于这些容器,value_type是std :: pair< A const,int>.这里有两个问题:
为什么这个变化?有什么好处?
>如何在插入时移动键? C 11版本接受任何东西(P上的约束是default_constructible< value_type,P&&&>),然后是std :: pair< A,int> – 这个参数的大部分时间是std :: make_pair返回的参数的类型,并且可以调用A的移动构造函数.但是在C 17版本中,此参数被转换为value_type,其中A是const,然后不动.必须复制A,如果我不能忽视某事.还是C 17改变任何一方呢?
谢谢!
解决方法
在C 17中添加了一个附加的非模板重载插入.
这种重载的优点在于它允许基于语法 – {}的.insert({{key},{value,args}}).模板参数不能通过{}基于构造指令而没有显式类型.