刷leetcode用到的STL总结:
1. map<k, v> m
由许多键值对组成(可以理解为pair< k, v>),map中k不能重复.map中键值对的先后顺序按k值排序,即若用迭代器从map.begin()开始遍历到end(),就是按k值升序遍历的.
插入的方法有:
m.insert(make_pair(k, v)); //调用insert方法
m[k] = v; //调用[]运算符,map的特色之一
访问的方法一般只能通过键值key访问:
m[k] // 作为右值
2.set<type> s
由关键字组成,type表示某一特定类型,且值不能重复.(可以理解为v=k的map)
特别的,若type 是 pair容器,则该set可以看做map
插入:
type e;
s.insert(e); //e为type类型
3.multimap <k, v> mm
与map相同之处在于也是按k值排序的.与map的重要区别是k值可以重复, k值相同的pair在multimap中的顺序由插入方式决定.
此外插入和访问的方式都与map不同,都是以pair为单位进行.
插入:
mm.insert(make_pair(k, v)); //不能再用[]运算符
访问:
k key; //key为k类型
auto p = mm.equal_range(key); //在mm中找k值为key的键值对(可能有多个)
//用迭代器遍历所有key相同的键值对
for (auto it = p.first; it != p.second; it++) {
v val = it->second; //访问v,将其赋给val
}
4.multiset<type> ms
与set相同之处在于也是按type值排序的, 与set的重要区别是type值可以重复,若type值相同,则不分先后.
特别的,当type为pair类型是,该multiset可以看做multimap.
然而,还是有细微差别:multiset<pair<k,v>
中,若k值相同,则还会按v值排序,而multimap只排k值.
插入:
mm.insert(type);