📜  unordered_multimap及其应用(1)

📅  最后修改于: 2023-12-03 15:35:31.654000             🧑  作者: Mango

unordered_multimap介绍及其应用

unordered_multimap是C++ STL中的一个关联容器,它与unordered_map的不同之处在于允许键值相等的键存在,因此被称为“多重映射”。

应用场景

unordered_multimap通常用于需要存储多个相同键的场景,比如:

  • 在哈希表中存储多个键值相等的元素;
  • 计算词频时,可以将单词作为键,频率作为值,相同的单词可以存储在同一键值下;
  • 在需要进行分组的数据中,可以使用字符串作为键,将属于同一组的数据存储在同一键值下。
常用操作

unordered_multimap的用法类似于unordered_map,它提供了插入、删除、查找、遍历等基本操作。以下是一些常用的操作示例:

插入元素
unordered_multimap<string, int> umap; // 定义unordered_multimap

// 通过insert()函数插入元素
umap.insert({"apple", 1});
umap.insert({"orange", 2});
umap.insert({"banana", 3});
umap.insert({"apple", 4}); // 可以插入键值相等的元素

// 或者使用emplace()函数
umap.emplace("grape", 5);

// 使用迭代器遍历unordered_multimap
for(auto iter = umap.begin(); iter != umap.end(); ++iter) {
    cout << iter->first << ": " << iter->second << endl;
}
删除元素
// 删除键为"apple"的元素
umap.erase("apple");

// 删除键值对为{"banana", 3}的元素
auto iter = umap.find("banana");
umap.erase(iter);

// 遍历unordered_multimap
for(auto& p : umap) {
    cout << p.first << ": " << p.second << endl;
}
查找元素
// 查找键为"apple"的元素
auto iter = umap.find("apple");

// 使用迭代器查找键为"orange"的元素
auto iter = umap.find("orange");
if(iter != umap.end()) {
    cout << "Value found: " << iter->second << endl;
} else {
    cout << "Value not found." << endl;
}

// 查找所有键值为"apple"的元素
auto range = umap.equal_range("apple");
for(auto iter = range.first; iter != range.second; ++iter) {
    cout << iter->first << ": " << iter->second << endl;
}
总结

unordered_multimap是一个非常实用的容器,可以在需要存储相同键的情况下发挥作用。与unordered_map相比,它还提供了更多的操作。需要注意的是,它是无序的,如果需要有序的关联容器,请使用multimap。