📜  如何在C++中有效使用unordered_map(1)

📅  最后修改于: 2023-12-03 14:52:40.905000             🧑  作者: Mango

如何在C++中有效使用unordered_map

在C++中,unordered_map是一个非常有用的数据结构。它提供了快速的键值对查找操作,并在大多数情况下具有常数时间复杂度。本文将介绍如何在C++中有效使用unordered_map。

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

我们可以使用迭代器来遍历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可能是你的最佳选择。