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

std::map 的插入元素方式

开发中遇到的问题

    • @[TOC](开发中遇到的问题)
  • 1. insert() 方法(最常用)
  • 2. 使用下标 [] 操作符
  • 3.emplace() 方法(C++11 起,推荐用于性能优化)
  • 4.范围插入(插入另一个容器的多个元素)
  • 5. 使用初始化列表(C++11 起)
  • 总结

在 C++ 中,std::map 是一个关联容器,用于存储键值对(key-value pairs),并根据键自动排序(默认按升序)

1. insert() 方法(最常用)

使用 std::pair

#include <iostream>
#include <map>
#include <string>
std::map<std::string, int> studentScores;// 插入元素
studentScores.insert(std::pair<std::string, int>("Alice", 85));
studentScores.insert(std::pair<std::string, int>("Bob", 90));

使用 make_pair

studentScores.insert(std::make_pair("Charlie", 95));

使用 std::map::value_type

studentScores.insert(std::map<std::string, int>::value_type("David", 88));

使用花括号 {}(C++11 起推荐)

studentScores.insert({"Eve", 92});

返回值

insert() 返回一个 std::pair<iterator, bool>bool:表示是否插入成功(true = 新插入,false = 键已存在)

2. 使用下标 [] 操作符

studentScores["Alice"] = 85;
studentScores["Bob"] = 90;
/*如果键 不存在,会自动创建并插入。如果键 已存在,会覆盖原来的值。使用 [] 时,如果键不存在,会用默认构造函数创建一个值(例如 int 会被初始化为 0)。
*/

3.emplace() 方法(C++11 起,推荐用于性能优化)

emplace 直接在容器内部构造元素,避免了临时对象的创建,效率更高。

studentScores.emplace("Frank", 87);  // 参数是构造 value_type 所需的参数

4.范围插入(插入另一个容器的多个元素)

std::map<std::string, int> otherMap = {{"Grace", 94}, {"Henry", 89}};
studentScores.insert(otherMap.begin(), otherMap.end());

5. 使用初始化列表(C++11 起)

std::map<std::string, int> studentScores = {{"Alice", 85},{"Bob", 90},{"Charlie", 95}
};

总结

想安全插入(不覆盖):用insert({"key", value})
想赋值或更新:用 map["key"] = value
追求性能:用 emplace("key", value)

以上的话就是本文的全部内容,如果有什么错误或者建议请指正,感谢!共同进步!

http://www.dtcms.com/a/340723.html

相关文章:

  • 下拉组件Tag支持自定义背景颜色,图片组支持设置刷新频率,DataEase开源BI工具v2.10.12 LTS版本发布
  • iOS 应用上架常见问题与解决方案,多工具组合的实战经验
  • 深入解析RAGFlow六阶段架构
  • iOS 应用迭代与上架节奏管理 从测试包到正式发布的全流程实践
  • 操作系统:资源竞争或者同步问题;锁、信号量等机制
  • Mac 上安装并使用 frpc(FRP 内网穿透客户端)指南
  • MacBook Pro M1升级Burp Suite2025.8
  • Mac电脑上虚拟机共享文件夹权限问题
  • 数据挖掘笔记:点到线段的距离计算
  • 5.3 包管理工具 npm yarn pnpm 对比
  • AI与BI的协同:未来企业数据分析的趋势
  • 【考研408数据结构-06】 树与二叉树(上):遍历算法全解析
  • 【考研408数据结构-07】 树与二叉树(下):特殊树结构与应用
  • HTTPS协议与HTTP协议的区别
  • Web前端调试与性能优化,Charles抓包工具的高效应用
  • 计算机视觉(二)------OpenCV图像视频操作进阶:从原理到实战
  • vscode连接docker
  • 【网络运维】Linux:正则表达式
  • Gin自定义Error中间件
  • 【C++】--指针与引用深入解析和对比
  • Gin传参和接收参数的方式
  • K8S-Secret资源对象
  • 如何代开VSCode的settigns.json文件
  • 【运维】githubvercel学习使用
  • 数据结构--2:ArrayList与顺序表
  • 【机器学习深度学习】AI大模型高并发挑战:用户负载部署策略
  • 26_基于深度学习的茶叶等级检测识别系统(yolo11、yolov8、yolov5+UI界面+Python项目源码+模型+标注好的数据集)
  • 【JavaEE】多线程 -- CAS机制(比较并交换)
  • iPhone17系列超全准确预告
  • 【windows】只需两步繁杂的桌面开启清爽模式