【数据结构】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() 清空所有元素
可以直接进行赋值和比较:=, >, >=, <, <=, != 等等

原创粉丝点击