📜  C++中的unordered_map equal_range(1)

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

C++中的unordered_map equal_range

在C++的STL库中, unordered_map 是一个非常有用的容器,它是一个关联容器,使用的是哈希表实现。在unordered_map 容器中,每个键值对是一个pair对象,这个 pair 对象包含一个键(key)和关联的值(value)。

equal_rangeunordered_map 中的一个成员函数,它是一个非常有用的函数,可以用它来查找一个键在unordered_map 中出现的区间。如果unordered_map 中有多个键等于输入的键,那么equal_range将返回一个表示该区间的 pair 对象,这个 pair 对象包含一个指向起始位置的迭代器和一个指向结束位置下一个元素的迭代器。如果有且仅有一个键与输入的键相等,那么返回的迭代器起始位置和结束位置是相同的。

下面是关于unordered_mapequal_range 的用法和示例:

用法
pair<iterator, iterator> equal_range(const key_type& key) noexcept;
pair<const_iterator, const_iterator> equal_range(const key_type& key) const noexcept;
  • key_type:键的数据类型
  • key:要查找的键
  • iterator:迭代器类型
  • const_iterator:常量迭代器类型
示例
#include <iostream>
#include <unordered_map>

int main()
{
    std::unordered_map<int, std::string> umap = {{1, "a"}, {2, "b"}, {3, "c"}, {4, "d"}};

    auto range = umap.equal_range(3);
    for (auto it = range.first; it != range.second; ++it)
        std::cout << it->first << " => " << it->second << '\n';

    return 0;
}

输出结果:

3 => c

在上面的例子中,我们创建了一个unordered_map 容器,并使用equal_range 函数查找键为3的元素。由于unordered_map 中存在一个键等于3的键值对,所以equal_range 返回了一个表示该区间的pair对象,我们可以通过遍历迭代器来访问这个区间内的元素。

auto range = umap.equal_range(5);
if (range.first == range.second)
    std::cout << "Key 5 not found in unordered_map\n";

此外,我们还可以通过比较返回的迭代器的起始位置和结束位置是否相同,来判断输入的键是否存在于unordered_map 中。如果起始位置和结束位置相同,则表示输入的键不存在于unordered_map 中。

总结

unordered_map 容器提供了一个非常有用的成员函数 equal_range,可以用它来查找一个键在unordered_map 中出现的区间。通过对返回的迭代器进行遍历,我们可以访问这个区间内的元素。