C++17下map不常用的接口函数汇总

C++17下的map提供了如下接口:

  • emplace( Args&&... args ),原位构造元素,将参数 args...转发给构造函数并插入生成元素
  • emplace_hint( const_iterator hint, Args&&... args ) 原位构造元素,插入新元素到容器中尽可能接近于恰在 hint 前的位置
  • try_emplace(const key_type& k, Args&&... args)
    try_emplace(key_type&& k, Args&&... args)
    try_emplace(const_iterator hint, const key_type& k, Args&&... args)
    try_emplace(const_iterator hint, key_type&& k, Args&&... args)
     若键不存在则原位插入,若键存在则不做任何事
  • extract( const_iterator position )

    extract( const key_type& x )    从另一容器释出结点

  • merge(std::map<Key, T, C2, Allocator>& source)
    merge(std::map<Key, T, C2, Allocator>&& source)
    merge(std::multimap<Key, T, C2, Allocator>& source)
    merge(std::multimap<Key, T, C2, Allocator>&& source)
    从另一容器接合结点

  • insert_or_assign(const key_type& k, M&& obj)
    insert_or_assign(key_type&& k, M&& obj)
    insert_or_assign(const_iterator hint, const key_type& k, M&& obj)
    insert_or_assign(const_iterator hint, key_type&& k, M&& obj)
    插入元素,或若关键已存在则赋值给当前元素

例子如下:

map<int, int> myMap;
auto[iter, bSuccess] = myMap.emplace(1,2);
auto[newIter, bNewSuccess] = myMap.emplace(1, 2); 
myMap.emplace_hint(myMap.begin(), 2, 3);

上面的第二句等同于std:make_pair<int, int>(1, 2),即等同于将键为1,值为2的键值对插入myMap ,等同于如下代码:

map<int, int> myMap{std::make_pair(1,2)};

map<int, int> myMap{{1,2}};
或
map<int, int> myMap;
myMap[1] = 2;

auto[iter, bSuccess] 中的iter表示插入键值对的位置,bSuccess表示是否插入成功,此时bSuccess应该为true。由于第2句代码已经插入了1,2,则第3句代码bNewSuccess应为false。

emplace_hint很简单,即使提供一个插入的迭代器,在指定的迭代器位置插入。

另外下面链接也很不错:STL常用操作:map_zhuikefeng的博客-CSDN博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值