C++ map使用的时候需要注意的一个小问题

本文详细探讨了C++中map容器的使用技巧,特别是如何判断一个key是否存在于map中,以及这种判断方式对map的影响。文章通过代码示例展示了不同情况下map的行为差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们知道 c++ map 分为 key 与 val 两个 变量 为映射的关系
今天写题的时候 又碰到这个问题了,,其实省赛时候就碰到了,,, 卡了很长时间, 写下来记录一下, 过两天再深入研究一下STL,,,

我们判断一个key值是否在map 中出现过, 当使用if 判断的时候:

注意 当这个key值没有在map中出现 会因为我们的使用而导致map记录下来这个值,这个时候我们使用count函数查询出现的次数的时候,就会发现返回结果是一,但是我们并没有插入这个值啊, 也就是说 当我们要使用map和这key值接触过 那么就会忠实的记录下来,并且count返回真值,因为没有对应的val值 所以对应的val为0

那么当我们写一道题目的时候 使用map的自减就可以把值减为零或者负数 这样就可以用if判断了 但是 使用 count时候无论加减 可是会一直存在的哦, 返回真值QWQ

但是但是 注意 我们使用ifif之后 那么 map的key里面已经有这个key了,, 输出map你会发现这个值,,,

以下是判断的代码

#include<bits/stdc++.h>
using namespace std;

int main() {

    map<int, int> mp;
    mp[1]++;
    mp[2]++;

    cout << mp[3] << endl;

    cout << mp.count(3) << "-----\n";
    cout << mp.count(2) << "-----\n";

    if(mp[3]) cout << "3_yes\n";
    if(mp[2]) cout << "2_yes\n";


    cout << mp.count(3) << endl;
    cout << mp.count(2) << endl;
    mp[3]--;
    cout << mp.count(3) << endl;
    cout << mp[3] << endl;
    cout << mp[2] << endl;
    return 0;
}
### C++ 中 `map` 的使用方法 #### 什么是 `map` `map` 是 C++ STL (Standard Template Library) 提供的一种关联容器,用于存储键值对(key-value pair),其中每个键都是唯一的。通过键可以快速访问对应的值[^1]。 --- #### 基本定义与初始化 可以通过模板参数指定键和值的数据类型来创建一个 `map` 容器。以下是几种常见的定义方式: ```cpp #include <map> #include <string> // 创建不同类型的 map 实例 std::map<int, std::string> intToStringMap; std::map<std::string, double> stringToDoubleMap; std::map<char, int> charToIntMap; // 初始化时可以直接赋初值 std::map<int, std::string> exampleMap = { {1, "One"}, {2, "Two"}, {3, "Three"} }; ``` 上述代码展示了如何声明不同类型的关键字映射关系以及如何在定义的同时完成初始化[^2]。 --- #### 插入元素的方法 向 `map` 中插入新元素有多种方式,具体如下: 1. **下标操作符 (`[]`)** 如果给定的键不存在,则会自动创建一个新的键值对,并将其值设置为默认值(对于内置类型来说通常是零或空字符串)。如果该键已经存在,则更新其对应值。 ```cpp std::map<int, std::string> myMap; myMap[1001] = "Alice"; // 插入新的 key 和 value ``` 2. **成员函数 `.insert()`** 这种方法不会覆盖已存在的键值对,而是忽略重复插入尝试。 ```cpp myMap.insert(std::make_pair(1002, "Bob")); myMap.insert({1003, "Charlie"}); ``` 这两种方法各有优劣,需根据实际需求选择合适的方式[^4]。 --- #### 访问元素 一旦数据被存放到 `map` 当中之后,就可以利用各种手段获取这些信息: - 使用迭代器遍历整个集合; - 调用特定查找功能定位目标位置等等。 示例如下: ```cpp for(auto& elem : myMap){ std::cout << elem.first << ": " << elem.second << "\n"; } if(myMap.find(1001)!=myMap.end()){ std::cout<<"Found Key: "<<myMap.at(1001)<<'\n'; } else{ std::cerr<<"Key Not Found\n"; } ``` 这里需要注意的是当调用了`.at()` 方法并且索引超出范围时将会抛出异常;而相比之下直接采用方括号语法虽然方便快捷但却缺乏安全性保障[^3]. --- #### 删除元素 要从 `map` 移除某些条目可借助于 erase 函数实现: ```cpp myMap.erase(1001); // 根据key删除单个项目 auto pos=myMap.lower_bound(1002); myMap.erase(pos,pos+2); // 利用迭代器区间清除多个连续项 ``` 以上就是关于C++标准库中的map组件的一些基础概念及其典型应用场景概述. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值