Map 是什么
pair的集合
自动按键值排序,键值不可以修改
map.size()
统计 map
中元素个数,函数返回一个整形变量,表示 map 中元素个数,时间复杂度 O(1)
map.empty()
检查 map 是否为空,返回一个 bool
型变量,1 表示 map 为空,否则为非空,时间复杂度O(1)
map.clear()
清空 map
,无返回值
map.count(x)
返回 map或 multimax
中实值为 x
的元素个数,时间复杂度为 O(k + logn)
map.begin()
返回集合的首迭代器,即指向map中最小元素的迭代器,时间复杂度为 O(1)
map.end()
返回集合的尾迭代器,众所周知,STL 中区间都是左闭右开的,那么 end()
函数返回的迭代器即为指向集合中最大元素的下一个位置的迭代器,因此 --map.end()
才是指向集合中最大元素的迭代器,时间复杂度为 O(1)
map.insert(pair<Key, T> (key, type))
在 map
中插入元素,返回插入地址的迭代器和是否插入成功的 bool
并成的 pair
,时间复杂度为 O(logn)
PS:map
在进行插入的时候是不允许有重复的键值的,如果新插入的键值与原有的键值重复则插入无效(multimap
可以重复)
map.erase(参数)
删除,参数可以是元素或者迭代器,返回下一个元素的迭代器,时间复杂度为 O(logn) ,注意在 multimap
中 s.erase(x)
会删除所有值为 x
的元素
map.find(x)
在 map
中查找键值为 x
的元素,并返回指向该元素的迭代器,若不存在,返回 map.end()
,时间复杂度为 O(logn)
map.lower_bound(x) / upper_bound(x)
用法与 find
类似,但查找的条件略有不同,时间复杂度 O(logn)
m.lower_bound(x)
表示查找 >= x
的元素中最小的一个,并返回指向该元素的迭代器
m.upper_bound(x)
表示查找 > x
的元素中最小的一个,并返回指向该元素的迭代器
总结一下,插入、删除、查找的时间复杂度都是O(logn)