您的位置:首页 > 其它

STL 中map 容器的基本用法

2014-03-19 09:19 645 查看
0. 创建

map<Key_Type key , Value_Type value,  less<Key_Type> > map1;  //定义了一个键索引为Key_Type类型,关联值索引为 Value_Type类型的关联容器。less<Key_Type>的作用是使得关联容器按照key 升序存储。
map<Key_Type key , Value_Type value, greater<Key_Type> > map2; // 与map1相同,但是是按照key降序存储。


1. 构造函数

map<k, v>m          // 创建名为m 的map对象,键和值的类型分别为k和v
map<k, v>m( m2 )    // 创建m2的副本, m与m2必须有相同的键类型和值类型
map<k,v>m(b, e)    //创建map类型的对象m, 存储迭代器b和e 标记范围内所有元素的副本

2. map 定义的类型

map<k, v> :: key_type    // 在map 容器中, 做索引的键的类型
map<k, v> :: mapped_type // 在map容器中,键所关联的值的类型
map<k, v>:: value_type  // 一个pair类型, 它的first元素具有const map<k,v>:: key_type 类型, 而second 元素则为map<k, v>::mapped_type。

举例:

map<int, vector<int> >m;
map<int, vector<int> >:: key_type  相当于   int
map<int, vector<int> >:: mapped_type 相当于  vector<int>
map<int, vector<int> >:: value_type 相当于 pair<int, vector<int> >

3. 添加元素

(a) 下标访问, 下标访问不存在的元素将导致在map容器中添加一个新元素。

map<string, int> word_count;  // empty map
word_count["Anna"]  = 1;

(b) insert 函数的使用

typedef map<string, int>:: value_type  ValueType;
word_count.insert( ValueType("Anna", 1) );

4. 访问数据

m.count(k)        // 返回m中k 出现的次数
m.find(k)          // 如果容器中存在按k索引的元素, 则返回指向该元素的迭代器。 如果不存在, 则返回超出末端迭代器 m.end()。
map <string, int>  word_count;
int occurs = word_count["foobar"];

第一种访问方式:

int occurs = 0;
if(word_count.count( "foobar")  )
occurs = word_count["foobar"];

第二种访问方式:

int occurs = 0;
mat<string, int> :: iterator it = word_count.find("foobar");
if(it != word_count.end() )
occurs = it->second;

5.删除数据

m.erase( k )                  // 删除m 中键为k 的元素。 返回值为size_type, 表示删除元素的个数。
m.erase(p)                    // 删除迭代器p 所指向的元素,p必须指向m中确实存在的元素,而且不等于m.end()
m.erase(b, e)                // 删除迭代器b,e范围内的元素

6.遍历数据

for(map<string, int>::const_iterator it = word_count.begin();
it< word_count.end(); it++)
{
cout<<it->first<<" occurs ";
cout<<it->second<< "times"<<endl;
}




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