std::map的insert和下标[]访问

在map中插入元素

改变map中的条目非常简单,因为map类已经对[]操作符进行了重载

enumMap[1] = "One";
enumMap[2] = "Two";
.....

这样非常直观,但存在一个性能的问题。插入2时,先在enumMap中查找主键为2的项,没发现,然后将一个新的对象插入enumMap,键是2,值是一个空字符串,插入完成后,将字符串赋为"Two"; 该方法会将每个值都赋为缺省值,然后再赋为显示的值,如果元素是类对象,则开销比较大。我们可以用以下方法来避免开销:

enumMap.insert(map<int, CString> :: value_type(2, "Two"))

 

 

insert()方法:若插入的元素的键值已经存在于map中,那么插入就会失败,不会修改元素的键对应的值;若键值在map中查不到,那么就会将该新元素加到map中去。

下标[key]方法:若插入元素的键值已经存在于map中,那么会更新该键值对应的值为新的元素的值;若该键值在map中找不到,那么就会新建一个键值为该键(key)的元素,并将key对应的值赋值为默认值(默认构造函数生成的对象)。

### C++ 中 `std::map` 的 `insert` `find` 方法详解 #### 1. `std::map::insert` 方法 `std::map::insert` 是用于向 `std::map` 容器中插入键值对的方法。它支持多种插入方式,具体如下: - **通过 `std::pair` 插入** 可以使用 `std::make_pair` 或者直接创建 `std::pair` 来插入元素。例如: ```cpp std::map<int, std::string> myMap; myMap.insert(std::make_pair(1, "one")); ``` - **通过 `value_type` 插入** 使用 `std::map<key_type, mapped_type>::value_type` 类型来插入元素。这种方式本质上与上述方法相同,只是更显式地指定了类型: ```cpp myMap.insert(std::map<int, std::string>::value_type(2, "two")); ``` - **通过下标操作符插入** 虽然这是严格意义上的 `insert` 方法调用,但它是一种常见的替代方案。如果键存在,则会自动插入新键值对;如果键已存在,则更新其对应的值: ```cpp myMap[3] = "three"; ``` 以上三种方式都可以成功插入元素到 `std::map` 中[^2]。 --- #### 2. `std::map::find` 方法 `std::map::find` 是用来查找指定键是否存在以及返回对应迭代器的方法。它的基本语法如下: ```cpp iterator find(const key_type& k); const_iterator find(const key_type& k) const; ``` - 如果找到匹配的键,则返回指向该键值对的迭代器; - 如果未找到,则返回 `myMap.end()`。 下面是一个完整的例子展示如何使用 `find` 方法: ```cpp #include <iostream> #include <map> int main() { std::map<int, std::string> myMap; // 插入一些数据 myMap.insert(std::make_pair(1, "one")); myMap.insert(std::make_pair(2, "two")); // 查找键为 1 的元素 auto it = myMap.find(1); // 返回指向 {1, "one"} 的迭代器 if (it != myMap.end()) { std::cout << "Key found: " << it->first << ", Value: " << it->second << "\n"; } else { std::cout << "Key not found\n"; } // 尝试查找存在的键 it = myMap.find(3); // 返回 end() if (it == myMap.end()) { std::cout << "Key 3 is not present in the map.\n"; } } ``` 在这个程序中,我们展示了如何利用 `find` 方法定位特定键并访问其关联值。 --- #### 总结 - `std::map::insert` 提供了灵活的方式将新的键值对加入容器。 - `std::map::find` 则允许快速检索某个键的存在状态及其映射值。 两者共同构成了管理 `std::map` 数据结构的核心功能之一。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值