在C++中,存在一种简单申请哈希表的函数:unordered_map<element type> name {{},{}}
一.对该函数的简要介绍:
1、unordered_map是存储<key, value>键值对的关联式容器,其允许通过key快速的索引到与其对应的value(hashmap<key> == value)
2、unordered_map中,键值通常用于唯一的标识元素,而映射值是一个对象,其内容与此键关联,键和映射的类型可以不同
3、在内部,unordered_map没有对<key, value>进行排序,unordered_map将相同哈希值的键值对放在对应的桶中
4、unordered_map容器通过key访问单个元素比map快,但它遍历元素子集的范围和迭代方面效率较低
5、unordered_map实现了直接访问操作符(operator[])允许通过key作为参数访问value
6、unordered_map的迭代器至少是前向迭代器
二. unordered_map迭代器
成员方法 | 功能 |
---|---|
begin() | 返回指向容器中第一个键值对的正向迭代器。 |
end() | 返回指向容器中最后一个键值对之后位置的正向迭代器。 |
cbegin() | 和 begin() 功能相同,只不过在其基础上增加了 const 属性,即该方法返回的迭代器不能用于修改容器内存储的键值对。 |
cend() | 和 end() 功能相同,只不过在其基础上,增加了 const 属性,即该方法返回的迭代器不能用于修改容器内存储的键值对。 |
find(key) | 查找以 key 为键的键值对,如果找到,则返回一个指向该键值对的正向迭代器;反之,则返回一个指向容器中最后一个键值对之后位置的迭代器(如果 end() 方法返回的迭代器)。 |
equal_range(key) | 返回一个 pair 对象,其包含 2 个迭代器,用于表明当前容器中键为 key 的键值对所在的范围。 |
#include <iostream>
#include <string>
#include <unordered_map>
using namespace std;
int main()
{
//创建 umap 容器
unordered_map<string, string> umap{
{"Python教程","http://python/"},
{"Java教程","http://java/"},
{"Linux教程","http://linux/"} };
cout << "umap 存储的键值对包括:" << endl;
//遍历输出 umap 容器中所有的键值对
for (auto iter = umap.begin(); iter != umap.end(); ++iter) {
cout << "<" << iter->first << ", " << iter->second << ">" << endl;
}
//获取指向指定键值对的前向迭代器
unordered_map<string, string>::iterator iter = umap.find("Java教程");
cout <<"umap.find(\"Java教程\") = " << "<" << iter->first << ", " << iter->second << ">" << endl;
return 0;
}
下面为程序输出结果:
umap 存储的键值对包括:
<Python教程, http://python/>
<Linux教程, http://linux/>
<Java教程, http://java/>
umap.find("Java教程") = <Java教程, http://java/>
三.unordered_map使用方法:
#include <iostream>
using namespace std;
#include <unordered_map>
int main()
{
unordered_map<string, double> myrecipe,mypantry = { { "milk", 2.0 }, { "flour", 1.5 } };
pair<string, double> myshopping("baking powder", 0.3);
//插入操作
myrecipe.insert(myshopping); // 在表中再插入表
myrecipe.insert(pair<string, double>("eggs", 6.0)); //
myrecipe.insert(mypantry.begin(), mypantry.end()); // 遍历
myrecipe.insert({ { "sugar", 0.8 }, { "salt", 0.1 } }); // 初始化表
unordered_map<std::string, std::string> mymap;
// populating container:
mymap["U.S."] = "Washington";
mymap["U.K."] = "London";
mymap["France"] = "Paris";
mymap["Russia"] = "Moscow";
mymap["China"] = "Beijing";
mymap["Germany"] = "Berlin";
mymap["Japan"] = "Tokyo";
// erase examples:
mymap.erase(mymap.begin()); // 用迭代器擦除
mymap.erase("France"); // 通过检索键值来擦除
mymap.erase(mymap.find("China"), mymap.end()); // 通过序列来擦除
//capacity examples:
cout << mymap.size() << endl;
cout << mymap.empty() << endl;
mymap.clear();
cout << mymap.size() << endl;
cout << mymap.empty() << endl;
system("pause");
return 0;
}