C++中的unordered系列关联式容器是标准库提供的一种用于存储大量数据的容器,它采用哈希表的实现方式,支持快速的查找、插入和删除操作。与传统的mapset不同,unordered_mapunordered_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++编程中愈发重要,特别适合需要快速访问和高效存储的场景。在实际开发中,我们应该根据具体需求选择合适的容器,以达到最佳的性能和效率。

点赞(0) 打赏

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部