c++中map的使用

插入数据方法

在构造map容器后,我们就可以往里面插入数据了。这里讲三种插入数据的方法:

第一种:用insert函数插入pair数据

 map<int, string> mapStudent;
 mapStudent.insert(pair<int, string>(1,“student_one”));

第二种:用insert函数插入value_type数据

map<int, string> mapStudent;
mapStudent.insert(map<int, string>::value_type (1,"student_one"));

 第三种:用insert函数插入make_pair数据

mapStudent.insert(make_pair(1, "student_one"));

第四种:用数组方式插入数据

map<int, string> mapStudent;

mapStudent[1] = “student_one”;

mapStudent[2] = “student_two”;

  以上四种用法,虽然都可以实现数据的插入,但是它们是有区别的,当然了第一种和第二种在效果上是完成一样的,用insert函数插入数据,在数据的插入上涉及到集合的唯一性这个概念,即当map中有这个关键字时,insert操作是不能再插入这个数据的,但是用数组方式就不同了,它可以覆盖以前该关键字对应的值,即:如果当前存在该关键字,则覆盖改关键字的值,否则,以改关键字新建一个key—value;

map取值的find、[]、at方法特性对比

详见:https://blog.youkuaiyun.com/guotianqing/article/details/108896065

对key不在时,处理的不同

在C ++ 11中map::at:如果该键不存在,则抛出out_of_range异常

find如果元素不存在,find返回aMap.end()

[] :如果没有key存在,则[]会创建一个新的键值对,并将value设置成一个默认初始化的值。

 所以最好用:索引操作符[]进行数据插入,用.find().at()进行数据查找。

  • 如果纯粹是查找取值,不要用[]操作符,因为它会自动创建不存在的元素
  • 正因为上面的原因,[]仅用于非const的情形下。在const map下使用[]会导致编译期错误
  • 如果不确定待查找的值是否存在,且不存在也是合理的,则使用find,判断返回值是否是end()
  • 如果待查找的值肯定存在,如果不存在就是逻辑上的错误,则使用at,处理out_of_range异常

迭代器

std::map<X, Y>实际储存了一串std::pair<const X, Y>

std::map<std::string, int> m = /* fill it */;

auto it = m.begin();

这里,如果你用*it,那么你将得到map第一个元素的std::pair:

现在你可以接收std::pair的两个元素:

(*it).first会得到key,

(*it).second会得到value。

这等同于it->first和it->second

参考:

浅谈c++中map插入数据的用法

https://www.cnblogs.com/tianzeng/p/9017148.html

C++ map用法总结(整理)

https://blog.youkuaiyun.com/sevenjoin/article/details/81943864?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param

### C++ STL `map` 容器使用教程 #### 创建与初始化 在C++中,`std::map` 是一种关联容器,它存储键值对并保持按键排序。为了使用`map`,需要包含相应的头文件,并指定命名空间。 ```cpp #include <iostream> #include <map> using namespace std; ``` 可以通过多种方式创建和初始化一个`map`实例: ```cpp // 默认构造函数 std::map<int, string> emptyMap; // 初始化列表 std::map<int, string> initListMap = {{1, "one"}, {2, "two"}}; // 复制另一个已存在的map std::map<int, string> copiedMap(initListMap); ``` 对于复制操作,可以直接利用等号运算符完成赋值[^1]。 #### 基本操作 ##### 插入数据 向`map`中插入新元素有几种不同的方法: ```cpp emptyMap.insert(std::make_pair(3, "three")); // 使用 insert 方法 emptyMap[4] = "four"; // 下标运算符自动插入不存在的 key-value 对 ``` ##### 访问元素 访问`map`中的元素通常通过下标运算符实现;需要注意的是如果key不存在,则会默认构造value类型的对象并将其加入到映射表里。 ```cpp cout << "Value of key 1 is: " << initListMap[1]; ``` ##### 删除元素 可以从`map`中移除特定项或清空整个结构体内的所有条目。 ```cpp initListMap.erase(1); // 移除单个元素 copiedMap.clear(); // 清空全部内容 ``` ##### 查找功能 提供了一套完整的接口用于定位某个具体的记录是否存在以及获取其位置迭代器。 ```cpp auto it = initListMap.find(2); if (it != initListMap.end()) { cout << "Found value: " << (*it).second; } ``` 此外还有其他实用的方法如`count()`用来判断某关键字是否有对应的映射关系存在[^3]。 #### 迭代遍历 支持标准输入输出流的操作,也允许借助迭代器机制逐一遍历内部成员变量。 ```cpp for(const auto& elem : initListMap){ cout << elem.first << ": " << elem.second << endl; } ``` 以上就是关于如何运用C++编程语言里的STL库组件——`map`的一些基础知识点介绍[^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值