📜  C++ STL中的unordered_multimap equal_range()函数(1)

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

unordered_multimap::equal_range()函数

unordered_multimap是C++标准模板库(STL)中的一个容器,它是哈希表的一种实现。我们可以使用equal_range()函数来查找一个键在unordered_multimap中的所有值的迭代器范围。本文将介绍unordered_multimap::equal_range()函数的语法、用法和注意事项,并给出一个简单的示例。

语法

unordered_multimapequal_range()函数的语法如下:

pair<iterator,iterator> equal_range (const key_type& k);

参数k是要查找的键值。函数返回一对迭代器:第一个迭代器指向第一个等于k的元素;第二个迭代器指向最后一个等于k的元素的下一个元素。如果没找到这样的元素,那么两个迭代器都将指向unordered_multimapend()

用法

下面是一个示例程序,演示如何使用unordered_multimap::equal_range()函数来查找键值为2的元素并输出它们的值:

#include <iostream>
#include <unordered_map>

int main()
{
    std::unordered_multimap<int,std::string> umap = { {1,"one"}, {2,"two"}, {2,"another two"}, {3,"three"} };
    
    // 查找键值为2的元素
    auto range = umap.equal_range(2);
    
    // 输出结果
    std::cout << "Elements with key 2:";
    for (auto it = range.first; it != range.second; ++it)
        std::cout << ' ' << it->second;
    std::cout << '\n';
    
    return 0;
}

输出结果为:

Elements with key 2: two another two

上述程序中,我们首先创建了一个unordered_multimap,其中包含4个键值对。然后,我们使用equal_range()函数找到了键值为2的元素,并将它们的值输出。

注意事项

unordered_multimap::equal_range()函数的复杂度为常数加上已找到元素的数量。在最坏情况下,它的时间复杂度为线性,取决于哈希函数的质量和容器的大小。它也是一个只读操作,不会修改unordered_multimap的内容。

结论

unordered_multimap::equal_range()函数是C++ STL的一个有用而高效的查找元素的工具。使用它,我们可以轻松地查找unordered_multimap中的所有匹配元素的值,并以迭代器范围的形式返回。