1。目录
- map简介
- map的功能
- 使用map
- 在map中插入元素
- 查找并获取map中的元素
- 从map中删除元素
2。map简介
map是一类关联式容器。它的特点是增加和删除节点对迭代器的影响很小,除了那个操作节点,对其他的节点都没有什么影响。对于迭代器来说,可以修改实值,而不能修改key。
3。map的功能
- 自动建立Key - value的对应。key 和 value可以是任意你需要的类型。
- 根据key值快速查找记录,查找的复杂度基本是Log(N),如果有1000个记录,最多查找10次,1,000,000个记录,最多查找20次。
- 快速插入Key - Value 记录。
- 快速删除记录
- 根据Key 修改value记录。
- 遍历所有记录。
4。使用map
使用map得包含map类所在的头文件
#include <map> //注意,STL头文件没有扩展名.h
map对象是模板类,需要关键字和存储对象两个模板参数:
std:map<int, string> personnel;
这样就定义了一个用int作为索引,并拥有相关联的指向string的指针.
为了使用方便,可以对模板类进行一下类型定义,
typedef map<int, CString> UDT_MAP_INT_CSTRING;
UDT_MAP_INT_CSTRING enumMap;
5。在map中插入元素
改变map中的条目非常简单,因为map类已经对[]操作符进行了重载
enumMap[1] = "One";
enumMap[2] = "Two";
.....
这样非常直观,但存在一个性能的问题。插入2时,先在enumMap中查找主键为2的项,没发现,然后将一个新的对象插入enumMap,键是2,值是一个空字符串,插入完成后,将字符串赋为"Two"; 该方法会将每个值都赋为缺省值,然后再赋为显示的值,如果元素是类对象,则开销比较大。我们可以用以下方法来避免开销:
enumMap.insert(map<int, CString> :: value_type(2, "Two"))
6。查找并获取map中的元素
下标操作符给出了获得一个值的最简单方法:
CString tmp = enumMap[2];
但是,只有当map中有这个键的实例时才对,否则会自动插入一个实例,值为初始化值。
我们可以使用Find()和Count()方法来发现一个键是否存在。
查找map中是否包含某个关键字条目用find()方法,传入的参数是要查找的key,在这里需要提到的是begin()和end()两个成员,分别代表map对象中第一个条目和最后一个条目,这两个数据的类型是iterator.
int nFindKey = 2; //要查找的Key
//定义一个条目变量(实际是指针)
UDT_MAP_INT_CSTRING::iterator it= enumMap.find(nFindKey);
if(it == enumMap.end()) {
//没找到
}
else {
//找到
}
通过map对象的方法获取的iterator数据类型是一个std::pair对象,包括两个数据 iterator->first 和 iterator->second 分别代表关键字和存储的数据
7。从map中删除元素
移除某个map中某个条目用erase()
该成员方法的定义如下
- iterator erase(iterator it); //通过一个条目对象删除
- iterator erase(iterator first, iterator last); //删除一个范围
- size_type erase(const Key& key); //通过关键字删除
clear()就相当于 enumMap.erase(enumMap.begin(), enumMap.end());
分享到:
相关推荐
### STL和常用算法详解 #### 一、STL概述 STL(Standard Template Library,标准模板库)是C++标准库的重要组成部分,它提供了一系列通用的数据结构和算法,极大地简化了程序开发工作,提高了代码的复用性。STL...
下面将对常用的 STL 进行介绍,包括 vector、set、map、string、priority-queue、list、bitset 等。 一、Vector Vector 是 STL 中的一种常用的容器,类似于数组,但具有自动的内存管理功能,对元素的插入和删除...
常用操作包括`insert()`插入键值对,`find()`查找键,`erase()`删除键值对,以及`operator[]`访问或设置值。 3. `set`: `set`也是一个关联容器,它只存储唯一元素,元素之间按照特定的排序规则排列。`set`同样...
学习C++ STL时,首先应理解每个组件的作用和适用场景,然后掌握如何通过迭代器操作容器,使用算法执行常见任务。同时,了解仿函数和函数对象可以让你编写更灵活的代码。对于高级主题,如定制分配器或自定义迭代器,...
C++ STL 中的 map 和 algorithm 是两种非常重要的组件,map 是一种关联式容器,能帮助我们建立一一对应的关系,而 algorithm 则提供了一些常用的算法来处理数据。 Map 简介 map 是一种典型的关联式容器,它的特点...
STL,全称为Standard Template Library(标准模板库),是C++编程语言中的一部分,它提供了一组...提供的"常用STL的示例代码"压缩包中应包含这些知识点的具体实例,可以帮助你更深入地理解STL的工作原理和使用方法。
Map是C++标准模板库(STL)中的一个重要组成部分,它是一个关联容器,专门用于存储键值对(key-value pairs)。这里的键(key)和值(value)是一一对应的,每个键在map中唯一,不允许重复。Map通过内部实现的红黑树...
### C++ STL 中 Vector, Map, Set 和 Sort 的用法详解 #### 一、Vector (向量) **1. 声明** - `vector<int> a;` —— 声明一个元素类型为 `int` 的 `vector` 对象 `a`,初始时不含任何元素。 - `vector<MyType> a...
在探讨STL(Standard Template Library,标准模板库)的常用函数之前,我们首先需要理解STL是什么以及它在C++编程中的重要性。STL是C++标准库的一部分,提供了大量预定义的数据结构(如vector、list、map等)和算法...
以下是对C++ STL库中常用库函数的详细总结: 1. **vector** - `size()`:返回向量中元素的数量。 - `empty()`:检查向量是否为空。 - `clear()`:清空向量的所有元素。 - `front()` / `back()`:访问第一个和...
向量是STL中最常用的容器之一,它是一个动态调整大小的一维数组。向量的优点在于它可以像数组一样通过索引访问元素,同时支持动态增长以适应元素的增加。 **游标(Iterator)** 迭代器是STL的重要组成部分,它扮演...
- set和map的插入、删除操作的时间复杂度分析。 - 模板元编程在STL中的应用,如迭代器的类型推断。 - 使用allocator定制内存管理。 - 介绍特殊容器如priority_queue和bitset。 理解并熟练使用STL是C++程序员...
4. **vector**:向量(vector)是最常用的STL容器之一,它是一个动态数组,可以容纳任意类型的元素。`vector`在内存中是连续存储的,这使得随机访问非常快,但插入和删除元素(尤其是中间位置)时需要移动元素,效率...
接着,`vector.txt`是关于动态数组的实现,`std::vector`是STL中最常用的容器之一。它可以动态地改变大小,支持随机访问,其背后实现通常是通过指针和内存管理来保证效率。 `deque.txt`代表双端队列,它允许在两端...
STL(Standard Template Library,标准模板库)是C++编程语言中的一个重要组成部分,它提供了高效且灵活的数据结构和算法。STL主要由六个组件构成:容器、算法、迭代器、仿函数、适配器和空间配置器。在本文中,我们...
STL(Standard Template Library)是C++标准库中的一部分,提供了一些常用的数据结构和算法。今天,我们将介绍STL容器的一些使用简介。 首先, lets talk about setprecision。这是一个控制输出流显示浮点数的有效...