大二上 数据结构与算法20241025
1.红黑树
2.unordered_map(哈希表实现)
unordered_map
是 C++ 标准库中的一个容器,它基于哈希表实现,用于存储键值对(key-value pairs)。以下是 unordered_map
的一些基本用法和代码示例:
包含头文件
要使用 unordered_map
,你需要包含 <unordered_map>
头文件。
##### #include <unordered_map>
声明 unordered_map
声明 unordered_map
时,需要指定键(key)和值(value)的类型。例如,如果你想存储整数键和字符串值,可以这样声明:
std::unordered_map<int, std::string> myMap;
插入元素
你可以使用 insert
成员函数或者 []
运算符来插入元素。
// 使用 insert 成员函数
myMap.insert(std::make_pair(1, "one"));
myMap.insert(std::make_pair(2, "two"));
// 使用 [] 运算符
myMap[3] = "three";
访问元素
你可以通过键来访问对应的值。
std::cout << "Value for key 1: " << myMap[1] << std::endl;
查找元素
你可以使用 find
成员函数来查找元素。如果找到了,find
会返回一个指向该元素的迭代器;如果没有找到,它会返回 end()
。
auto it = myMap.find(2);
if (it != myMap.end()) {
std::cout << "Found key 2 with value: " << it->second << std::endl;
} else {
std::cout << "Key 2 not found." << std::endl;
}
删除元素
你可以使用 erase
成员函数来删除元素,它可以接受一个键或者一个迭代器。
// 通过键删除
myMap.erase(2);
// 通过迭代器删除
auto it = myMap.find(3);
if (it != myMap.end()) {
myMap.erase(it);
}
遍历 unordered_map
你可以使用迭代器来遍历 unordered_map
中的所有元素。
for (auto it = myMap.begin(); it != myMap.end(); ++it) {
std::cout << "Key: " << it->first << ", Value: " << it->second << std::endl;
}
完整的代码示例
下面是一个完整的示例,展示了如何使用 unordered_map
:
#include <iostream>
#include <unordered_map>
#include <string>
int main() {
// 创建一个 unordered_map,键为 int,值为 string
std::unordered_map<int, std::string> myMap;
// 插入元素
myMap.insert(std::make_pair(1, "one"));
myMap[2] = "two"; // 使用 [] 运算符
// 访问元素
std::cout << "Value for key 1: " << myMap[1] << std::endl;
// 查找元素
auto it = myMap.find(2);
if (it != myMap.end()) {
std::cout << "Found key 2 with value: " << it->second << std::endl;
} else {
std::cout << "Key 2 not found." << std::endl;
}
// 删除元素
myMap.erase(2);
// 检查元素是否被删除
if (myMap.find(2) == myMap.end()) {
std::cout << "Key 2 has been erased." << std::endl;
}
// 遍历 unordered_map
std::cout << "Contents of myMap:" << std::endl;
for (auto it = myMap.begin(); it != myMap.end(); ++it) {
std::cout << "Key: " << it->first << ", Value: " << it->second << std::endl;
}
return 0;
}
这个示例展示了如何声明 unordered_map
,插入、访问、查找、删除元素,以及如何遍历 unordered_map
。