map(映射)

本文介绍了C++中map的概念,它被视为一种特殊的数组,允许自定义key和value类型。例如,创建一个map `map<string, int> cnt`,可以使用`cnt["July"] = 7`的方式进行赋值和插入,同时map会自动按key排序。遍历map可使用迭代器,删除元素通过迭代器调用`erase`函数,插入操作除了直接赋值外,还可以使用`insert`方法。查找元素时,避免直接用`cnt[key]`,可以使用`cnt.count(key)`检查key是否存在,或用`find`函数获取key的位置。" 52815181,5687432,Pioneer 3-AT: 全地形研究机器人,"['机器人技术', '科研设备', '自动化', '移动机器人', '教育工具']

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

map可以理解为一种特殊的数组(但是存储单元并不连续),该数组的下标(key,first)和其元素(value,second)可以自己定义

如:map<string,int> cnt;

            cnt数组的key“下标”为string类型,value(对应元素)为int型

            可以用cnt["July"]=7这样的方式来赋值(July和7同时赋值)

常用函数:

遍历:map<string,int>::iterator it;(迭代器)

for(it=cnt.begin();it!=cnt.end();it++)

    cout<<it->first<<" "<<it->second<<endl;(first和second可直接使用,表示key和value)

删除:

    it=Map.begin();  

     Map.erase(it);//通过迭代器删除  


     string key="root";  
     Map.erase(key);//通过key删除  
       
     Map.erase(Map.begin(),Map.end());//一个迭代器,到另一个迭代器  
     //相当于  Map.clear(); 

插入:

    插入的方法有多种,最简单的方式就是上面所介绍的cnt["July"]=7,插入的同时,map通过key的大小从小到大进行自动排序

查找:

    通过上面我们可以知道在使用到cnt["July"]的时候July会直接插入,所以在查找的时候一定不要用  int value=cnt[key],用键来查找,cnt.count(key)查找key是否出现(0,1)it=cnt.find(key)查找key的地址(没有就返回end())


### 关于Map映射的概念 #### Map 的定义 `Map` 是一种数据结构,用于存储键值对(key-value pairs)。它是一种关联数组的形式,在其中通过唯一的关键字(key)访问相应的值(value)。在 Java 中,`Map` 是一个接口类,其本身并不提供具体的实现方式,而是由子类如 `HashMap` 和 `TreeMap` 提供具体的功能[^1]。 #### 键的特性 在一个 `Map` 中,所有的键都是唯一的。如果尝试向 `Map` 插入具有相同键的新条目,则会覆盖旧的值[^4]。这意味着对于同一个键,只会存在一个与其对应的价值。 #### 值的特点 虽然键必须是独一无二的,但是不同的键可以拥有相同的值。换句话说,多个键能够指向同样的价值对象[^5]。 #### 底层实现机制简介 - **`HashMap`**: 它基于哈希表实现,提供了快速存取的能力。它的性能通常优于其他类型的映射,但在遍历顺序方面没有保障。 - **`TreeMap`**: 使用红黑树作为基础构建,因此它可以保持按键自然排序或者定制比较器指定的顺序排列元素。 #### 方法概览 以下是几个常用的 `Map` 接口的方法及其功能描述: - `.put(K key, V value)`:将指定的键与指定的值相关联;如果此映射先前包含了一个该键的映射关系,则替换旧值并返回原来的值。 - `.get(Object key)` :返回特定键所映射到的值;如果没有找到这样的键则返回 null。 - `.remove(Object key)` : 删除指定键的映射关系(如果存在的话),并返回之前与此键相对应的值。 - `.containsKey(Object key)` : 判断是否含有某给定的键。 - `.size()` : 返回这个映射中的键-值映射数量。 - `.isEmpty()` : 测试此映射是否为空。 - `.keySet()` : 返回一个包含所有键的集合视图[^5]。 ```java import java.util.HashMap; import java.util.Map; public class Example { public static void main(String[] args) { Map<String, String> map = new HashMap<>(); // 添加元素 map.put("apple", "red"); map.put("banana", "yellow"); // 访问元素 System.out.println(map.get("apple")); // 移除元素 map.remove("banana"); // 检查大小 int size = map.size(); System.out.println(size); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值