之前写某题单词查找的时候,有用到set,晚上写codeforces#497 div2 D题有用到map
感觉set,map的功能挺类似的,在此小结;
这里就不具体比较相同点和不同点了,免得看起来乱七八糟的,这里分别细说;
set:
#include <set>
set<...>s;(类型可为int,char,string)
功能主要有:
插入元素;s.insert()
查找元素;s.find()
删除元素;s.erase()
取出首尾元素;set<int>::iterator itor ;//这句一定要写!注意!
itor=s.begin(); itor=s.end();
itor!=s.end(); 可用来判断某个元素是否找到
其中set本身,可定义排序;
set<int, greater<int>> s;
set<int, less<int> > s;
插入,删除支持单个元素,或是一段区间,或是全部;可自定义;
感觉某位大神的博客讲的非常详细,学习了;
map
定义#include <map>
map<.. , ...>f;
其中可为int ,或char,string
因为map类似于hash,所以map中元素和射影是相对应的;
分别举个例子好了:(可参见这里)
当你需要存的是整型数组中的数据,
ai ->i;
map<int ,int >b;
简单的写,可以有 b[a[i]]=i;
也就是说,b[]中的下标和它所对应的值都为int;
char也是相同的意思
当你需要存 b['abc']='defg';的时候你就要用 map<char ,char >b;
map使用起来和set相似,同样可以插入元素,查找元素,删除元素
插入可以简单的写为 b[a[i]]=..类似的写法
查找和删除和set相同
还是说一下自己感悟到的map和set的区别好了,map由于更趋近于hash,所以速度会比set要快很多,但是set的功能比map更完整