C++中的unordered系列关联式容器
是标准库提供的一种用于存储大量数据的容器,它采用哈希表的实现方式,支持快速的查找、插入和删除操作。与传统的map
和set
不同,unordered_map
和unordered_set
不保证元素的顺序,而是依赖于哈希函数来快速定位元素。下面将详细介绍这两个容器及其用法。
1. unordered_map
unordered_map
是一个以键值对存储元素的容器。每个键都是唯一的,允许使用任何可哈希的类型作为键。其主要操作,如插入、查找、删除元素等的平均时间复杂度都是O(1)。
示例代码:
#include <iostream>
#include <unordered_map>
#include <string>
int main() {
// 创建并初始化一个 unordered_map
std::unordered_map<std::string, int> scores;
// 插入数据
scores["Alice"] = 90;
scores["Bob"] = 85;
scores["Charlie"] = 92;
// 查找数据
std::string name = "Bob";
if (scores.find(name) != scores.end()) {
std::cout << name << "'s score: " << scores[name] << std::endl;
} else {
std::cout << name << " not found!" << std::endl;
}
// 删除数据
scores.erase("Alice");
// 遍历 unordered_map
for (const auto& pair : scores) {
std::cout << pair.first << ": " << pair.second << std::endl;
}
return 0;
}
在上面的示例中,我们创建了一个unordered_map
,将学生的姓名映射到他们的分数。我们可以方便地插入、查找和删除这个映射中的元素。
2. unordered_set
unordered_set
是一个存储唯一元素的容器,类似于set
,但不保证元素的顺序。它同样依赖哈希函数,支持快速的查找、插入和删除操作。
示例代码:
#include <iostream>
#include <unordered_set>
#include <string>
int main() {
// 创建并初始化一个 unordered_set
std::unordered_set<std::string> students;
// 插入数据
students.insert("Alice");
students.insert("Bob");
students.insert("Charlie");
// 查找数据
std::string name = "Bob";
if (students.find(name) != students.end()) {
std::cout << name << " is in the set." << std::endl;
} else {
std::cout << name << " is not in the set." << std::endl;
}
// 删除数据
students.erase("Alice");
// 遍历 unordered_set
for (const auto& student : students) {
std::cout << student << std::endl;
}
return 0;
}
这个示例中,我们使用unordered_set
来存储学生的姓名,演示了如何插入、查找和删除元素。
总结
使用unordered系列关联式容器
的主要优点在于其操作性能的优势。由于采用哈希表的结构,这些容器能够在常数时间内完成查找、插入和删除操作。但需要注意的是,哈希冲突可能会导致性能下降,此外,其不保证元素顺序可能不适合所有应用场景。
随着对数据的需求不断增加,unordered系列关联式容器
在现代C++编程中愈发重要,特别适合需要快速访问和高效存储的场景。在实际开发中,我们应该根据具体需求选择合适的容器,以达到最佳的性能和效率。