映射和多重映射(map/multimap):
v map和multimap容器类(映射和多重映射):#include
v 平衡二叉树结构
v map的元素是成对pair的(键key/值value), 内部的元素依据其值自动排序。
v 一个键对应一个值(map)
v 一个键可以对应多个值(multimap)
Map:
v insert()O(logn)
v erase()O(logn)
v find() O(logn)找不到返回a.end()
v [key]运算符 O(logn)
v 允许重复元素,没有[]运算符
Map详解:
在map中插入元素:
v 改变map中的条目非常简单, 因为map类已经对[]操作符进行了重载
v mapmymap;
v mymap['a'] = 1;
v mymap['b'] = 2;
v 或者
v mymap.insert( pair('a',1) );
v 查找并获取map中的元素
v 获得一个值的最简单方法o intans=mymap[‘a’];
v 但是,只有当map中有这个键的实例时才会成功, 否则会
v 因此我们可以使用 find()方法来发现一个键是否存在。传入的参数是要查找的key
v if(mymap.find(‘a’)==mymap.end()){
v //没找到
v }else{
v //找到insert
v }
从map中删除元素:
v 移除某个map中某个条目用erase() o 该成员方法的定义如下
v iterator erase(iterator it); //通过一个条目对象删除
v iterator erase(iterator first, iterator last); //删除一个范围
v size_type erase(const Key& key); //通过关键字删除
v clear()就相当于 mymap.erase(mymap.begin(), mymap.end());
实例:
#include
#include
#include
using namespace std;
int main()
{
mapmymap;
map::iterator it;
mymap.insert(pair('a',1));
mymap['b']=2;
mymap['c']=3;
mymap['d']=4;
mymap['e']=5;
it=mymap.find('c');
mymap.erase(it);
mymap.erase('d');
for(it=mymap.begin();it!=mymap.end();it++)
cout<<(*it).first<<"=>"<<(*it).second<<endl;
return 0;
}
二元组pair:
v STL的头文件中描述了一个看上去非常简单的模板类pair, 用来表示一个二元组或元素对, 并提供了按照字典序对元素对进行大小比较的比较运算符模板函数
v 例如,想要定义一个对象表示一个平面坐标点,则可以:
n pair double> p1;
n cin>> p1 .first>> p1 .second;