今天用了用map现在来总结一下。
map
Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字(key),每个关键字只能在map中出现一次,第二个可能称为该关键字的值(value))的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。这里说下map内部数据的组织,map内部自建一颗红黑树(一 种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序且不重复的。
map的创建
map<int,int> m;
前一个int是key的种类,后一个是value的种类,不一定非要是 int,其他的数据类型都可以,甚至是自定义类型。
map常用接口
查找函数
//返回键值等于 key 的元素个数
m.count(key)
//返回键值等于 key 的第一个元素,找不到就返回 end(),注意该函数返回的是map的迭代器
m.find(key)
//返回 键值 >= key 的第一个元素位置
m.lower_bound(key)
//返回 键值 >= key 的第一个元素位置
m.upper_bound(key)
//返回 键值 == key 的元素区间
m.equal_range(key)
迭代器
map<int, string>::iterator iter;
我们这样定义一个map 的迭代器
iter->first返回当前元素的key
iter->second返回当前元素的value
插入操作
插入介绍两种,做题用的都是第一种。
m[key]=value
m.insert(map<int, int> :: value_type(key, value))
要注意的是 第一种方法过程是先在m中查找主键为key的项,没发现,然后将一个新的对象插入m中,键是key,值是一个缺省值。插入完成后,将值赋为value;所以可以不用判断是否存在。直接用。
删除操作
移除某个map中某个条目用erase()
该成员方法的定义如下
- iterator erase(iterator it); //通过一个条目对象删除
- iterator erase(iterator first, iterator last); //删除一个范围
- size_type erase(const Key& key); //通过关键字删除
clear()就相当于 enumMap.erase(enumMap.begin(), enumMap.end());
此处加一个面试问过问题,map的查找的时间复杂度是O()
以后在继续写吧。。先继续肝ddl了