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

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

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.lryc.cn/news/2383726.html

相关文章:

  • Nginx 核心功能
  • String.join()-高效字符串拼接
  • 【Canvas与图标】圆角方块蓝星CSS图标
  • 系统性能分析基本概念(5) : 何时开始性能分析
  • Python实现Web请求与响应
  • 机器学习 day05
  • CentOS Stream安装MinIO教程
  • C#新建打开文件对话框
  • 汇川PLC通过开疆智能Profinet转ModbusTCP网关读取西门子PLC数据案例
  • 零基础入门:MinerU 和 PyTorch、CUDA的关系
  • 借助IEDA ,Git版本管理工具快速入门
  • 三维空间,毫秒即达:RTMP|RTSP播放器在Unity中的落地实现
  • 【计算机网络】HTTP/1.0,HTTP/1.1,HTTP/2,HTTP/3汇总讲解,清晰表格整理面试重点对比
  • ubuntu 搭建FTP服务,接收部标机历史音视频上报服务器
  • 一、内存调优
  • IDEA启动报错:Cannot invoke “org.flowable.common.engine.impl.persistence.ent
  • 从加密到信任|密码重塑车路云一体化安全生态
  • Java的Filter与Spring的Interceptor的比较
  • 多线程编程的典型使用场景
  • grafana dashboard 单位 IEC SI a i
  • WPF···
  • Git的工作流程
  • 微服务架构中的多进程通信--内存池、共享内存、socket
  • 电脑中所有word文件图标变白怎么恢复
  • RK3568 OH5.1 源码编译及问题
  • Qt5、C++11 获取wifi列表与wifi连接
  • 【KWDB 2025 创作者计划】_从部署开始了解KWDB
  • 高等数学-微分
  • 有没有开源的企业网盘,是否适合企业使用?
  • 基于系统整合的WordPress个性化配置方法深度解析:从需求分析到实现过程