//------------------------------------------------
// [1/15/2013 Administrator]
// Project: mapp1
// File: mapp.cpp
//-------------------------------------------------
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main()
{
//自定义一个容器
typedef multimap<int, string> IntStringMMap;
IntStringMMap coll; //定义一个Int/String形式容器
//向容器无序的插入一些值
//一个关键字对应一个值
coll.insert(make_pair(5, "tagged"));
coll.insert(make_pair(2, "a"));
coll.insert(make_pair(1, "this"));
coll.insert(make_pair(4, "of"));
coll.insert(make_pair(6, "strings"));
coll.insert(make_pair(1, "is"));
coll.insert(make_pair(3, "multimap"));
//打印容器里面所有元素的值
//遍历所有的元素
//每个元素的第二项对应的是值
IntStringMMap::iterator pos;
for (pos = coll.begin(); pos != coll.end(); ++pos)
{
//cout << (*pos).second << " "; //和下面的效果一样
cout << pos->second << " ";
}
cout << endl;
return 0;
}
/*
1. 这里的元素是成对的键值/实值(key/value pair),所以你必须首先生成这个pair,再
讲它插入群集内部。辅助函数make_pair()正是为了这个目的而打造。
2. 迭代器所指的是“键值/实值”对组(key/value pair),因此你无法一口气打印他们,必须
取出pair的成员,亦即所谓的first和second。因此,以下语句:
pos->second
便取得了“键值/实值”对组(key/value pair)中的第二部分,也就是multimap元素的实值(value).
同样的道理,以下语句:
pos->first
取得了“键值/实值”对组(key/value pair)中的第一部分,也就是multimap元素的实值(key).
* Map和Multimaps
Map的元素都是“实值/键值”所形成的一个对组(key/value pairs).每个元素有一个键,
是排序的基础。每个键只能出现一次,不允许重复。Map为关联式数组,具有任意索引类型。
Multimaps和map相同,但允许重复元素,也就是说multimap可包含多个键值(key)相同
的元素。Multimap可被当作“字典”使用。
*/