容器map&multimap控制的长度为N的序列都是以有N个节点的有序二叉树的方式存储的,每个节点中存储一个类型为pair
与set不同只有const key这部分猜参与次序比较,而set是整个元素的值一起参加比较;
typedef map
构造函数
map() 声明一个按pred()排序的空映射;
map(pr) 声明一个按函数对象pr排序的空映射;
map(pr,al) 跟上面一样不过还存储一个分配器对象al;
map(first,last) 声明一个按pred()排序的映射,她的初始值内容是有指定的序列中复制的;
map(first,last,pr) 声明一个按pr排序的映射,她的初始内容是从指定的序列中复制的;
map(first,last,pr,al) 跟上面的相同,不过她还存储一个分配器对象al;
函数:
clear 删除容器中的所有元素;
erase删除it所指定的元素,返回一个迭代器,指向下一个元素,还可以通过调用erase(key)来删除与键值key次序相等的元素;
insert 插入一个具有{键,值}的元素val返回值是一个累pair
find 为了在序列中查找一个键值与key次序相等的元素;
lower_bound 在序列中查找第一个键值不排在key之前的元素,它是所有与key次序相等的元素形成的子区间的起始处;
upper_bound 在序列中查找第一个其键值排在key之后的元素,它是境界着所有与key次序相等的元素形成的区间的末端;
equal_range 检测学系列中所有元素都与key次序相等的子区间,返回的迭代器pai
count 检测调用equal_rang(key)得到的子区间的长度;
key_comp 获得与构造时候相同的规则对键值排序的对象;
value_comp 获得一个可以对元素中存储的{键,值}排序的对象;
map中有一个multimap没有的操作,定位键值与key次序相等的元素,可以用表达式mycont[key],如果没有找到就会指向容器中添加元素[key,mapped_type()],对于multimap对象来说insert每次的调用都会插入一个新元素,函数的返回值是指向这个新元素的迭代器,而不是piar
测试:
// new.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "map"
#include "assert.h"
#include "iostream"
using namespace std;
typedef map
typedef multimap
typedef pair
int main(int argc, char* argv[])
{
mycont v1;
myval xx[3];
for (int i=0;i<3;i++)
{
new(&xx[i])myval('a'+i,1+i);
}
assert(v1.empty()&&v1.size()==0);
v1.insert(xx[0]);
v1.insert(xx[1]);
v1.insert(xx[2]);
assert(v1.size()==3&&(*v1.begin()).first=='a');
pair
assert((*pib.first).second==4&&(*pib.first).first=='d'&&pib.second);
pib=v1.insert(myval('d',5));
assert((*pib.first).second==4&&(*pib.first).first=='d'&&!pib.second);
assert((*--v1.end()).first=='d'); //自动排序;
assert((*v1.erase(v1.begin())).first&&v1.size()==3);
assert((*--v1.rend()).first=='b'); //相等与反了一下下,还有++==--
assert((*v1.rbegin()).first=='d');
assert(v1.key_comp()('a','c')&&!v1.key_comp()('a','a'));
assert(v1.value_comp()(myval('a',0),myval('c',0)));
assert(!v1.value_comp()(myval('a',0),myval('a',1)));
assert((*v1.find('b')).first=='b');
assert(v1.count('x')==0&&v1.count('b')==1);
mcont v2;
assert((*v2.insert(v2.begin(),myval('a',1))).first=='a');
assert((*v2.insert(v2.begin(),myval('a',2))).first=='a');
assert(v2.size()==2);
assert((*v2.insert(v2.begin(),myval('a',1))).first=='a');
assert(v2.size()==3);
return 0;
}