【数据结构】map 和 set 增、删、查、改的使用
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() 清空所有元素
可以直接进行赋值和比较:=, >, >=, <, <=, != 等等
上一篇: html5中绘图方法有哪些
下一篇: Java 数据结构(插入、删除)
推荐阅读
-
sequelize的简单使用(增、删、查、改)
-
MyBatis的配置与使用(增,删,改,查)
-
使用LitePal操作数据库(实现对数据的增、删、改、查)
-
【数据结构】C/C++ 顺序表的 创建、初始化、增、删、改、查、遍历等基本操作
-
Java数据结构:List线性表的顺序存储结构(增,删,查,改,字符串输出)【泛型,迭代器】
-
Android数据库(SQLite)的简单使用——增、删、查改功能的简单实现
-
node.js使用mongoose操作数据库实现购物车的增、删、改、查功能示例
-
JS_数据结构——链表的实现及增、删、改、查
-
数据结构------- 数组二次封装 数组的增 删 改 查
-
【数据结构】map 和 set 增、删、查、改的使用