本篇学习unordered_multimap的插入数据操作,具体的函数如下:

insert

(C++11)

插入元素或结点 (C++17 起)
(公开成员函数)

emplace

(C++11)

原位构造元素
(公开成员函数)

emplace_hint

(C++11)

使用提示原位构造元素
(公开成员函数)

示例代码:

#include <unordered_map>
#include <utility>
#include <string>
#include <time.h>
#include <iostream>using namespace std;void insertOperator()
{unordered_multimap<int, string>map1;//1.insert 插入元素或结点map1.insert({1, "hello"});auto map1it = map1.begin();map1.insert(map1it, {7, "333333"});//键值存在插入无效map1.insert(pair<int, string>(3, "scott"));map1.insert(pair(2, "C++17 的写法"));//C++17 的写法//map1[2] = "修改元素";//元素修改cout << "map1.size = " << map1.size() << " map1.max_size = " << map1.max_size() << endl;auto iter1 = map1.begin();cout << "map1的值为:" << endl;while (iter1 != map1.end()){cout << iter1->first << ": " << iter1->second << endl;iter1++;}//2..emplace原位构造元素unordered_multimap<int, string> map2;map2.emplace(std::make_pair(11, std::string("使用pair的移动构造函数")));map2.emplace(std::make_pair(11, "使用 pair 的转换移动构造函数"));map2.emplace(12, "使用 pair 的模板构造函数");map2.emplace(pair(12, "emplace插入第二个元素"));auto pair1 = map2.emplace(pair{13, "emplace插入第三个元素"});//返回一个pair<int, string> 的迭代器cout << "iterator.first:" << pair1->first << " second: " << pair1->second << endl;cout << "map2.size = " << map2.size() << " map2.max_size = " << map2.max_size() << endl;auto map2it = map2.begin();while(map2it != map2.end()){cout << map2it->first << ": " << map2it->second << endl;++map2it;}cout << "---------------------------------" << endl;//3.emplace_hint使用提示原位构造元素unordered_multimap<int, string> map3;auto map3it = map3.begin();//返回一个迭代器auto map3Hint1 = map3.emplace_hint(map3it, 23, "emplace_hint插入第三个元素");map3.emplace_hint(map3it, 21, "emplace_hint插入第一个元素");auto map3Hint2 = map3.emplace_hint(map3it, 21, "emplace_hint插入第二个元素");unordered_multimap<int, string>::iterator map3it2 = map3.begin();while(map3it2 != map3.end()){cout << map3it2->first << ": " << map3it2->second << endl;++map3it2;}cout << "emplace_hint1 " << map3Hint1->first << ": " << map3Hint1->second << endl;cout << "emplace_hint2 " << map3Hint2->first << ": " << map3Hint2->second << endl;//插入时间对比int count = 1000000;unordered_multimap<int, string> map4;double startTime1 = clock();//1计算开始for(int i = 0; i < count; i++)//214748{map4.insert(pair{i, "hello"});}double endTime1 = clock();//1时间结束map4.clear();cout << "for    1 run time is: " << (double)(endTime1 - startTime1) / CLOCKS_PER_SEC << "s" << endl;cout << endl;unordered_multimap<int, string> map5;double startTime2 = clock();//1计算开始for(int i = 0; i < count; i++)//214748{map5.emplace(pair{i, "hello"});//pair{i, "hello"}比 (i, "hello")速度快}double endTime2 = clock();//1时间结束map5.clear();cout << "for    2 run time is: " << (double)(endTime2 - startTime2) / CLOCKS_PER_SEC << "s" << endl;cout << endl;
}int main()
{insertOperator();cout << "hello world" << endl;return 0;
}

运行结果:

参考:

https://zh.cppreference.com/w/cpp/container/unordered_multimap

unordered_multimap学习之插入数据操作insert,emplace ,emplace_hint相关推荐

  1. multimap学习之插入数据操作insert,emplace ,emplace_hint

    本篇学习multimap插入数据相关的操作,具体的操作函数如下 insert 插入元素或结点 (C++17 起) (公开成员函数) emplace (C++11) 原位构造元素 (公开成员函数) em ...

  2. JDBC进行批量插入数据操作

    目录 1.方式一:使用PreparedStatement 2.方式二:使用addBatch(),excuteBatch(),clearBatch() 3.方式三:设置不允许自动提交数据 4.总结 1. ...

  3. mysql数据库插入数据语法_数据库请求:插入数据(INSERT)

    MySQL中, INSERT 语句用来向数据表中插入数据.可以一次性插入一条或多条数据. 语法: SQL中通过 INSERT INTO 命令向数据表中插入数据.下面是通用语法: INSERT INTO ...

  4. SQL (十四)插入数据(insert语句,把数据插入表中)

    文章目录 插入完整的行:values子句 不安全写法 安全写法:在表名后的括号明确给出列名 小结 插入行的一部分:简单 插入某些查询的结果(即检索出的数据):insert select 示例:把另一个 ...

  5. Mysql 之 插入数据(insert into 、 replace into 解析)

    Mysql 插入数据 1.插入数据方法 mysql中常用的三种插入数据的语句: insert into:正常的插入数据,插入数据的时候会检查主键或者唯一索引,如果出现重复就会报错: replace i ...

  6. Java JDBC批处理插入数据操作

    在此笔记里,我们将看到我们如何可以使用像Statement和PreparedStatement JDBC API来批量在任何数据库中插入数据.此外,我们将努力探索一些场景,如在内存不足时正常运行,以及 ...

  7. MyBatis的插入数据操作

    编写UserMapper映射文件 <mapper namespace="userMapper"> <insert id="add" param ...

  8. java jdbc 批处理_Java JDBC批处理插入数据操作

    在此笔记里,我们将看到我们如何可以使用像Statement和PreparedStatement JDBC API来批量在任何数据库中插入数据.此外,我们将努力探索一些场景,如在内存不足时正常运行,以及 ...

  9. SQL SERVER插入数据操作

    准备工作: 我需要一张User表,这张表有几个字段,还有一个自增长的数字id,表结构如下: 这是一张比现实应用中简单的多的用户表,UserID是自增长字段. 开始执行一个最简单的INSERT: ? 1 ...

最新文章

  1. 轻松获取LAMP,LNMP环境编译参数配置
  2. monkeyrunner环境配置
  3. 你是什么类型的程序员?
  4. java怎样调用DLL方法
  5. GridView里的一点小功能:截取多余字符、改变鼠标经过行的样式
  6. 软件测试工程师面试必备技能
  7. 测试场景组件化轮子——用例元
  8. Oracle闪回技术
  9. android 前后同时预览_用上这些官方动态壁纸,让你的 Android 主屏简洁又优雅
  10. 表弟励志做程序员了,除了霸王我还能给他什么?
  11. scrt设置右键粘贴,选中复制
  12. scala_day01_安装_基础_IO_函数_递归_异常_方法_样例类_伴生对象
  13. Linux驱动开发: 杂项字符设备
  14. 计算机毕设(附源码)JAVA-SSM化妆品销售网站
  15. 微信小程序 之wx.previewImage图片预览(多张图片预览)
  16. 开关电源buck电感、电容选择
  17. 接口测试神器,它来了,它带着光环走来了
  18. iPhone 4与iPad开发基础教程
  19. java如何让线程sheep_Java面试知识点之线程篇(三)
  20. 使用open live writer客户端写博客(亲测有效)

热门文章

  1. 987654321 问题
  2. python生成一副扑克牌_基于Python实现扑克牌面试题
  3. linux chown命令_如何在Linux上使用chown命令
  4. 使用遗传算法解旅行商问题
  5. 2022中国大学生程序设计竞赛高职专场
  6. 架构师之路(五)如何做好业务建模?
  7. VisualFreeBasic编程教程(从零开始学或VB进阶)
  8. 没有U盘安装ubuntu18(linux),EasyUEFI安装ubuntu
  9. #LeetCode169. 多数元素 #在所有 Java 提交中击败了 99.94% 的用户 @FDDLC
  10. FastDFS的Tracker及Storage节点添加及删除