您的位置:首页 > 其它

STL---map

2009-02-20 23:55 141 查看
一:map是关联式容器,它提供一对一的映射。存储的数据有两个部分,一个是关键字,一个是值,其中关键字只能出现一次,而不同的关键字,可以有相同的值。map中用pair来存储这两个值的。pair是stl定义的一种数据结构,后面会有简述。map内部自建一颗红黑树,所有map里面的数据都是有序的。

二:方法

1.构造函数,map有6个构造函数。但是我们通常用map m;这种方法来构造一个map实例。

2.数据插入,map通常用下面的三种方式插入数据。

1),用insert方法插入pair数据。

void main( VOID )
{
map m;
m.insert(pair("sa",67));
m.insert(make_pair("sd",565));//用make_pair方法(函数)产生pair对象。
map::iterator it = m.begin();
while(it!=m.end())
{
cout
m.insert(map::value_type("sd",5));

map::iterator it = m.begin();
while(it!=m.end())
{
cout
struct std::pair,class std::allocator > const ,int>说明是个struct pair类型的。

3,)通过重载[]来插入数据。

void main( VOID )
{
map m;
cout<::value_type).name()<::iterator it = m.begin();
while(it!=m.end())
{
coutm.insert(pair("ds",15));

当关键字相同的时候,不会改变他的值,也就是说在调用insert函数的时候,会检查,这个关键字是否存在了,如果存在,那么就不做任何操作。否则插入新的数据。
m["ds"] = 4;
m["ds"] = 10;

这种方式插入数据是不会做检查的,会直接在那个点上写上关键字和值,也就是说。ds项的值将是10.

3,数据遍历。

stl里的容器的遍历都是通过迭代器来遍历的。即便是用数组的方式,也是通过迭代器。数据遍历也有三种法式,1,向前迭代器,2,用反向迭代器,3,数组,第一种方式前面也就有说明。下面讲第二第三种,

反向迭代器的方式。

void main( VOID )
{
map m;
m["ds"] = 4;
m["as"] = 10;
m.insert(pair("cs",5));
m["bs"] = 123;
map::reverse_iterator rit = m.rbegin();//从后面开始。
while(rit!=m.rend())
{
coutm["ds"] = 4;
m["as"] = 10;
m.insert(pair("cs",5));
m["bs"] = 123;
map::iterator it = m.begin();
for(int i=1;i<=m.size();i++)
{
coutstruct pair
{
typedef Type1 first_type;
typedef Type2 second_type
Type1 first;
Type2 second;
pair( );
pair(
const Type1& __Val1,
const Type2& __Val2
);
template
pair(
const pair& _Right
);

与之相关的是make_pair函数。是个模板函数。

template
pair make_pair(
Type1 _Val1,
Type2 _Val2
);

三:关于map的迭代器,

对数据的插入,遍历,查找等操作,迭代器将不会失效,但是删除操作会失效。这与vector等序列式容器是不一样的。

三:效率

因为内部RB-TREE所以大多数的操作的时间复杂度都是O(logN),空间分析,在这些节点不保存数据的情况下就需要,左右孩子指针,指向父节点的指针,说明红黑的枚举值。

其他以后补充。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: