【数据结构】map 和 set 增、删、查、改的使用
来源:互联网 发布:rem js计算font size 编辑:程序博客网 时间:2024/06/08 04:50
map:
map 是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字K,每个关键字只能在map中出现一次,第二个可能称为该关键字的值V)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。
map内部自建一颗红黑树(一 种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的,后边我们会见识到有序的好处。
1 头文件
#include < map >
2 定义
map< string, int> my_Map; //第一个string是key,也可是char等数据类型,第二个值是value,也可为其他数据类型
或者是
typedef map<string,int> MY_MAP ; MY_MAP my_Map;
3 迭代器:
map<string,int>::iterator map_it; //从声明可以看出返回pair类型,有两个值,first代表const(只读)的关键字key,second代表value map_it=my_Map.begin();//指向首
4 插入数据
my_Map["a"] = 1; //下标操作其实是map遍历的方法,因为下标遍历时候key不存在就插入,存在不做操作,++my_Map["a"]存在不存在都将其值 +1
my_Map.insert(map<string,int>::value_type("b",2)); my_Map.insert({"b",2}); my_Map.insert(pair<string,int>("c",3)); my_Map.insert(make_pair<string,int>("d",4));
5 查找数据和修改数据
int i = my_Map["a"]; my_Map["a"] = i;
MY_MAP::iterator my_Itr; my_Itr.find("b"); int j = my_Itr->second; my_Itr->second = j;
不过注意,键本身是不能被修改的,除非删除。
6 删除数据
my_Map.erase(my_Itr);//错误,不能这样使用 my_Map.erase("c");
还是注意,第一种情况在迭代期间是不能被删除的,道理和foreach时不能删除元素一样。
7 迭代数据
for (my_Itr=my_Map.begin(); my_Itr!=my_Map.end(); ++my_Itr) {}
8 其它方法
my_Map.size() 返回元素数目
my_Map.empty() 判断是否为空
my_Map.clear() 清空所有元素
可以直接进行赋值和比较:=, >, >=, <, <=, != 等等
深入了解map,multimap
map容器提供一个键值对容器,map与multimap差别仅仅在于multiple允许一个键对应多个值。
set :
1 头文件
#include < set>
2 定义
set<string> my_set; //string是关键字,类似map中的第一个,也可是char等数据类型
3 迭代器:
set<string>::iterator set_it;//从声明可以看出指向关键字 set_it=my_set.begin();//指向首
4 插入数据
(1) 不可用下标方法插入遍历
(2)
my_set.insert({‘a’}); //insert返回一个pair类型,第一个是一个迭代器指向元素,第二个是一个bool值,插入成功返回true,已经存在返回false
(3)
vector<int> vec={2,4,6,8,10};my_set.insert(vec.begin(),vec.end());
(4)
my_set.insert({1,2,3,4,5,6,7});
5 查找数据和修改数据
set<char>::iterator my_Itr=my_set.begin(); *my_Itr;//元素 my_set.find('a');//返回迭代器,指向key=='a'的元素,若没有此元素返回my_set.end(); my_set.count('a');//返回关键字等于'a'的数量,对已set不允许重复关键字,返回值永远是0或1
不过注意,键本身是不能被修改的,除非删除。
6 删除数据
my_set.erase(my_Itr); my_set.erase("c");
还是注意,第一种情况在迭代期间是不能被删除的,道理和foreach时不能删除元素一样。
7 迭代数据
for (my_Itr=my_Map.begin();my_Itr!=my_Map.end();++my_Itr) {}
8 其它方法
my_set.size() 返回元素数目
my_set.empty() 判断是否为空
my_set.clear() 清空所有元素
可以直接进行赋值和比较:=, >, >=, <, <=, != 等等
- 【数据结构】map 和 set 增、删、查、改的使用
- map和set增删查改
- 容器map与set的增删查改
- Set改写成Map使用,自己写的一个Map
- Set和Map数据结构
- Set和Map数据结构
- Set和Map数据结构
- [数据结构]Map和Set
- Set和Map数据结构
- Set和Map数据结构
- Set和Map数据结构
- Set和Map数据结构
- ES6 -- 新的数据结构:Set和Map
- ES6的数据结构set 和 map
- set和map的使用
- ECMAScript6 Set和Map数据结构
- es6 set和map数据结构
- map和set的使用和原理
- C复习
- Hello,world!
- 使用二层交换机进行VLAN网络划分
- 什么是Solr
- 读取并处理YUV420P_Byte[]方法
- 【数据结构】map 和 set 增、删、查、改的使用
- VS2010 数据库操作(基于Access 2013)之二
- 堆排序算法解析
- 【图解】梯度下降
- linux运行java时出错
- CCF 最大波动 JAVA 201609-1
- leetcode problem solve 1——Two Sum
- Linux指令查询
- 《.NET大局观》--嬗变的痛苦