📅  最后修改于: 2023-12-03 14:52:40.905000             🧑  作者: Mango
在C++中,unordered_map是一个非常有用的数据结构。它提供了快速的键值对查找操作,并在大多数情况下具有常数时间复杂度。本文将介绍如何在C++中有效使用unordered_map。
unordered_map是C++标准库中提供的一个哈希表的实现。它允许我们将一个键映射到一个值上,类似于字典或者python中的字典。所有的键必须是唯一的,但是值则可以不唯一。
unordered_map可以用以下方式定义:
unordered_map <key_type, value_type> map_name;
其中key_type是键的类型,value_type是值的类型,map_name是unordered_map的名称。例如:
unordered_map<string, int> my_map;
这定义了一个从字符串到整数的映射。
在unordered_map中插入元素非常简单。我们可以使用insert函数或者[]操作符:
// 使用insert函数
my_map.insert(make_pair("a", 1));
my_map.insert(make_pair("b", 2));
my_map.insert(make_pair("c", 3));
// 使用[]操作符
my_map["d"] = 4;
上述代码通过使用insert函数和[]操作符向unordered_map中插入了4个元素。
从unordered_map中删除元素也非常简单。我们可以使用erase函数:
my_map.erase("a");
这样就会从unordered_map中删除键为"a"的元素。
我们可以使用下标运算符[]或者find函数来访问unordered_map中的元素:
// 使用下标运算符[]
int val = my_map["b"];
// 使用find函数
unordered_map<string, int>::iterator it = my_map.find("c");
if (it != my_map.end()) {
int val = it->second;
}
如果指定的键存在,则上述代码可以获取对应的值;否则,它们可能会引发未定义行为。
我们可以使用count函数或者find函数来判断unordered_map中是否存在指定的键:
if (my_map.count("a")) {
// 键"a"存在
}
unordered_map<string, int>::iterator it = my_map.find("b");
if (it != my_map.end()) {
// 键"b"存在
}
我们可以使用迭代器来遍历unordered_map中的所有元素:
for (auto it = my_map.begin(); it != my_map.end(); ++it) {
cout << it->first << " : " << it->second << endl;
}
它将输出unordered_map中每个键值对的键和值。
本文介绍了如何在C++中使用unordered_map进行插入、删除、访问和遍历元素的方法。unordered_map提供了一种高效的方式来处理键值对,并且可以在大多数情况下具有常数时间复杂度。如果你需要一个键值对的数据结构,那么unordered_map可能是你的最佳选择。