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;
}