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())
{
cout m.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())
{
cout m["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++)
{
cout struct 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),空间分析,在这些节点不保存数据的情况下就需要,左右孩子指针,指向父节点的指针,说明红黑的枚举值。
其他以后补充。
二:方法
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())
{
cout
当关键字相同的时候,不会改变他的值,也就是说在调用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())
{
cout
m["as"] = 10;
m.insert(pair("cs",5));
m["bs"] = 123;
map::iterator it = m.begin();
for(int i=1;i<=m.size();i++)
{
cout
{
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),空间分析,在这些节点不保存数据的情况下就需要,左右孩子指针,指向父节点的指针,说明红黑的枚举值。
其他以后补充。
相关文章推荐
- STl map 介绍
- 自定义数据结构与STL map对比
- map(STL)
- C++中P.J. Plauger STL和SGI STL中map的区别
- STL::map关联容器
- STL中vector、list、deque和map的区别
- STL中map用法详解
- C++STL之关联容器【map】【set】
- STL中map、set的数据结构及底层实现
- Stl的几个小技巧:map查找,string大写转换,map插入。
- STL之map
- STL中sort、priority_queue、map、set的自定义比较函数
- 【深度探索STL】关联式容器map和multimap
- STL中的map、unordered_map、hash_map
- 用STL中的map容器实现从很多单词找出所有只有一个字母不同的单词
- 关于STL中map的erase迭代器是否失效的讨论
- STL中map使用详解
- C++ STL中Map的按Key排序
- hdu 4941 Magical Forest(STL map & 结构体运用)
- stl map基本使用