本文主要内容
1.理解键值对
2.map 的使用
3.multimap 的使用
4.底层结构
1.键值对
键值对是用来表示一对一的数据映射关系的一种结构,该结构中一般只包含两个成员变量key和value,key代表关键字,value代表与key对应的信息值。
我们生活中有许多这样的对应关系,例如英汉互译字典就是典型的<k,v>模型。每个中文词语与英文单词就存在着一一映射的关系,我们用其他数据结构描述出这样的关系可能需要很多辅助,但是用map就能轻易的进行描述。这就是键值对为我们**在用编程处理一对一数据的时候,提供的快速通道。**下面是键值对的定义:
STL中关于键值对的定义:
//键值对
template<class K,class V>
struct pair
{
typedef K first_type;
typedef V second_type;
K first;
V second;
pair()
:first(K())
, second(V())
{}
pair(const K& a, const V&b)
: first(a)
, second(b)
{}
}
make_pair ( , )的定义:
//make_pair 是函数模板,根据pair的类型直接推出参数类型
template<class K, class V>
pair<K, V> make_pair(const K&k, const V&v)
{
return pair<K, V>(k, v);
}
2. map的使用
想要深入了解的可以查看:map文档
下面我简单介绍 一下map:
- map是关联容器,它按照特定的次序(按照key来比较)存储由键值key和值value组合而成的元素。
- 在map中,键值key通常用于排序和惟一地标识元素,而值value中存储与此键值key关联的内容。键值 key和值value的类型可能不同,并且在map的内部,key与value通过成员类型value_type绑定在一起, 为其取别名称为pair: typedef pair value_type;
- 在内部,map中的元素总是按照键值key进行比较排序的。
- map中通过键值访问单个元素的速度通常比unordered_map容器慢,但map允许根据顺序对元素进行 直接迭代(即对map中的元素进行迭代时,可以得到一个有序的序列)。
- map支持下标访问符,即在[]中放入key,就可以找到与key对应的value。
- map通常是用红黑树实现的。
map使用示例–英汉词典
map提供一对一的数据处理能力(其中第一个是关键字,第二个是该关键字对应的值),由于这个特性(键值对),我们在描述英汉互译词典时就变得很轻松了。下面是使用map描述字典的示例
示例代码
//map 的使用--英汉互译字典
void test_map()
{
map<string, string> m1;
map<string, string>m2{
{
"apple", "苹果" },
{
"banan", "香蕉" }, {
"orange", "橘子" } };
cout << m2["apple"] << endl; //苹果
cout << m2["peach"] << endl; //空串
//迭代器使用
map<string, string>::iterator it = m2.begin();
//auto it=m2.begin();
while (it != m2.end())
{
cout << (*it).first << ":" << (*it)