📅  最后修改于: 2023-12-03 15:29:54.080000             🧑  作者: Mango
在C++的STL库中, unordered_map
是一个非常有用的容器,它是一个关联容器,使用的是哈希表实现。在unordered_map
容器中,每个键值对是一个pair对象,这个 pair 对象包含一个键(key)和关联的值(value)。
equal_range
是unordered_map
中的一个成员函数,它是一个非常有用的函数,可以用它来查找一个键在unordered_map
中出现的区间。如果unordered_map
中有多个键等于输入的键,那么equal_range
将返回一个表示该区间的 pair 对象,这个 pair 对象包含一个指向起始位置的迭代器和一个指向结束位置下一个元素的迭代器。如果有且仅有一个键与输入的键相等,那么返回的迭代器起始位置和结束位置是相同的。
下面是关于unordered_map
的 equal_range
的用法和示例:
pair<iterator, iterator> equal_range(const key_type& key) noexcept;
pair<const_iterator, const_iterator> equal_range(const key_type& key) const noexcept;
#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
中出现的区间。通过对返回的迭代器进行遍历,我们可以访问这个区间内的元素。