当前位置: 首页 > news >正文

哈希表和容器中添加元素的方法

push_back v.s. emplace_back:

两者都是在容器末尾添加元素的方法,但是push_back会创建临时对象并进行拷贝构造,而emplace_back是直接构造

//push_back
std::vector<MyClass> vec1;
MyClass obj1("Object1", 1);//创建一个obj1对象
vec1.push_back(obj1); //进行拷贝构造vec1.push_back(MyClass("Object2", 2)); //构造临时对象,然后移动构造//emplace_back
std::vector<MyClass> vec2;
vec2.emplace_back("ObjectA", 10); // 直接在 vector 中构造
vec2.emplace_back("ObjectB", 20); // 直接在 vector 中构造

insert:

可用于unordered_map类型以及unordered_set类型的哈希表总,如果传入的键已存在,则插入失败,原有的键值对保留

std::unordered_map<std::string, int> myMap;
myMap.insert(std::make_pair("apple", 1));
std::pair<const std::string, int> item = {"banana", 2};
myMap.insert(item);std::unordered_set<std::string> mySet;
mySet.insert("apple");
std::string fruit = "banana";
mySet.insert(fruit);

operator[] :

仅可用于unordered_map类型的哈希表中进行访问和插入

std::unordered_map<std::string, int> myMap;
myMap["apple"] = 1;          // 插入 ("apple", 1)
myMap["apple"] = 10;         // 修改 "apple" 对应的值为 10
int value = myMap["banana"]; // "banana" 不存在,插入 ("banana", 0) (int默认构造为0),然后 value = 0

emplace:

在容器管理的内存中就地构造元素

std::unordered_map<std::string, int> myMap;
myMap.emplace("apple", 1); // 直接用 "apple" 和 1 构造 pairstd::unordered_set<std::string> mySet;
mySet.emplace("apple"); // 直接用 "apple" 构造 std::string

emplace_hint:

hint 是一个迭代器,提示新元素可能适合插入的位置

std::unordered_set<std::string> mySet;
auto it_hint = mySet.end();//声明一个迭代器指向哈希表末尾
mySet.emplace_hint(it_hint, "cherry");//在哈西末尾添加"cherry"std::unordered_map<std::string, int> myMap;
auto it_hint = myMap.end(); 
myMap.emplace_hint(it_hint, "cherry", 3);

http://www.xdnf.cn/news/592633.html

相关文章:

  • 什么是CDN(Content Delivery Network,内容分发网络)
  • ubunt配置本地源
  • Linux开发板串口终端会限制命令字符数并且循环覆盖
  • 并发编程 之 TreeMap ConcurrentSkipListMap set queue源码分析
  • 自动化测试报告工具
  • 【八股战神篇】Redis高频面试题
  • AI预测3D新模型百十个定位预测+胆码预测+去和尾2025年5月22日第85弹
  • 数据结构知识点汇总
  • 速卖通关键词搜索API开发指南
  • 简单说一下px和ex 的区别......
  • 测试文章1
  • ATGM336H-6N_GNSS 单频多模定位导航模块
  • IEEE Wireless Communications 2025年1月-4月论文速览
  • 二十一、面向对象底层逻辑-scope作用域接口设计
  • 05算法学习_59. 螺旋矩阵 II
  • 如何测试JWT的安全性:全面防御JSON Web Token的安全漏洞
  • 第34节:迁移学习中的特征提取方法
  • 落石滑坡倒树自然灾害检测数据集VOC+YOLO格式958张3类别
  • Linux 搭建FTP服务器(vsftpd)
  • 操作系统结构
  • C++23中std::span和std::basic_string_view可平凡复制提案解析
  • 珠宝课程小程序源码介绍
  • 先进先出(FIFO)页面置换算法
  • echarts各种踩坑记录
  • 【Python中的Socket套接字详解】网络通信的核心基石
  • 右键长按超过 200ms, 高亮选中的typora内容, win+a换颜色
  • 黑马Java基础笔记-14
  • 2025长三角数学建模ABC题赛题已出!速拿
  • Docker 推出强化镜像以增强容器安全性
  • 关于初学者对大模型的一些概念的理解