看别人的文章吧。
才不是因为懒,这个人写得真的很好啦!
以下是我参考C++标准函数网页的笔记;
先发链接
无序映射是关联容器,用于存储由键值和映射值的组合形成的元素,并允许根据其键快速检索各个元素。
在unordered_map中,键值通常用于唯一地标识元素,
而映射值是具有与此键关联的内容的对象。键和映射值的类型可能不同。
在内部,unordered_map中的元素相对于其键或映射不按任何特定顺序排序值,但根据其哈希值将其组织为存储桶,
以允许直接通过其键值(平均时间平均复杂度恒定)快速访问各个元素。尽管
unordered_map容器通过其键访问单个元素的速度要比map容器快,
但是通过它们的子集进行范围迭代通常效率较低。 无序映射实现直接访问运算符(operator []),
该运算符允许使用键值作为参数直接访问映射值。
PS:
大概意思就是这个:
unordered_map<string, int> d;//距离数组,表示对应状态的距离.可以理解为当前字符串对应一个整数类型的距离
string start; d[start] = 0;//起点的距离是0
每个string类型
对应的int类型
的值是唯一的,但是同一个int类型
的值可以被多个string类型
映射到。
也就是说,这就是一个可以 以不同类型为下标 储存 不同类型的值 的超级数组!
总结:
unordered_map
相对于map
的优势就在于访问单个元素的速度更快。
这样的话我们在做那些用一些其它类型的值来表示某种类型下的值的某个状态时,用起来会更加契合。
例如,在上面的例子八数码(这是博客链接, 题目链接)中,
用unordered_map<string, int> d;
表示对应string类型的状态 的 int类型的距离 。