Bootstrap

C++STL容器之unordered_map

目录

1.介绍

2.主要特点

3.unordered_map的用法

4.性能问题

5.总结


1.介绍

        unordered_map是 C++ 标准库中的一个关联容器,用于存储键值对(key-value pairs)。它基于哈希表实现,提供了平均时间复杂度为 O(1) 的查找、插入和删除操作。与map不同,unordered_map不会对键进行排序,因此它不保证元素的顺序。

2.主要特点

        1.基于哈希表:unordered_map使用哈希表来存储元素,因此它的查找、插入和删除操作的平均时间复杂度为 O(1)。

        2.无序存储:元素在容器中的存储顺序是不确定的,不会根据键的值进行排序。

        3.每个键在 unordered_map 中必须是唯一的,不能有重复的键。

        4.自定义哈希函数和比较函数:可以通过自定义哈希函数和键比较函数来满足特定的需求。

3.unordered_map的用法

        (1)定义和初始化。

std::unordered_map<std::string, int> umap;

        (2)插入元素。

umap["apple"] = 10;
umap["banana"] = 20;
umap.insert({"orange", 30});

        (3)访问元素

int apple_count = umap["apple"];  // 访问键为 "apple" 的值

        (4)检测元素是否存在

if (umap.find("banana") != umap.end()) {
    // 键 "banana" 存在
}

        (5)删除元素

umap.erase("banana");  // 删除键为 "banana" 的元素

        (6)遍历元素

for (auto it=pair.begin();it<=pair.end();it++) {
    std::cout << pair->first << ": " << it->second << std::endl;
}

for (const auto& pair : umap) {
    std::cout << pair.first << ": " << pair.second << std::endl;
}

        (7)获取大小

size_t size = umap.size();

        (8)清空容器

umap.clear();

        (9)自定义哈希函数和比较函数

struct MyKey {
    int id;
    std::string name;
};

struct MyKeyHash {
    std::size_t operator()(const MyKey& k) const {
        return std::hash<int>()(k.id) ^ std::hash<std::string>()(k.name);
    }
};

struct MyKeyEqual {
    bool operator()(const MyKey& lhs, const MyKey& rhs) const {
        return lhs.id == rhs.id && lhs.name == rhs.name;
    }
};

std::unordered_map<MyKey, int, MyKeyHash, MyKeyEqual> custom_map;

4.性能问题

        (1)哈希冲突:虽然unordered_map的平均时间复杂度为O(1),但在哈希冲突较多的情况下,性能可能会下降。

        (2)内存使用:由于哈希表的实现,unordered_map 可能会使用较多的内存。

5.总结

        unordered_map是一个高效的关联容器,适用于需要快速查找、插入和删除键值对的场景。由于它不保证元素的顺序,因此在需要有序存储的情况下,map可能是更好的选择。

如有错误,敬请指正!!!

;