C++ STL中unordered_multiset equal_range()函数
在C++ STL中,unordered_multiset是一个记录一组元素的容器,而equal_range()则是一个函数,用于在无序多重集合(unordered_multiset)中查找特定值所处的范围。
equal_range()函数的语法和实现
equal_range()函数的语法如下:
pair<const_iterator,const_iterator> equal_range (const key_type& k) const;
其中,unordered_multiset是容器类型,const_iterator是指针类型,pair表示一对值(两个值),第一个值表示查找结果的起始位置,第二个值表示查找结果的结束位置。
该函数先通过哈希函数计算关键字k的哈希值,然后查找存储在该哈希值处的桶(bucket)中是否存在关键字k,如果存在,则返回结果对应着该桶的所有元素。
在查找元素时,使用了双向链表进行元素存储,同时也使用了哈希表提高查找速度。equal_range()函数使用桶内链表进行查找,如果桶中没有元素则返回一个空指针。
equal_range()函数的返回值
unordered_multiset::equal_range()函数的返回值是一个pair类型,它包含两个const_iterator迭代器。这两个迭代器组成的区间表示了,所有key与输入的key相同的元素在容器中的范围。如果没有任何元素与输入的key相同,则返回的迭代器范围会指向容器中元素的最后一个。
下面是equal_range()函数的示例代码:
#include <iostream>
#include <unordered_set>
using namespace std;
int main() {
unordered_multiset<int> myset{1, 2, 2, 3, 4, 5, 5, 5};
// 使用equal_range()查找元素2
auto range = myset.equal_range(2);
// 输出结果
cout << "包含 " << range.second - range.first << " 个 2:" << endl;
for (auto it = range.first; it != range.second; it++) {
cout << *it << ", ";
}
// 查找一个不存在于序列中的值
range = myset.equal_range(10);
// 输出结果
cout << endl << "包含 " << range.second - range.first << " 个 10:" << endl;
for (auto it = range.first; it != range.second; it++) {
cout << *it << ", ";
}
return 0;
}
输出结果:
包含 2 个 2:
2, 2,
包含 0 个 10:
以上代码中,我们定义了一个unordered_multiset容器来存储一组整数,然后使用equal_range()函数查找容器中所有值为2的元素,并输出结果。
接着,我们查找一个不存在于容器中的元素10,同样使用equal_range()函数来查找有关于它的信息,结果说明容器中不存在值为10的元素。
结论
在C++ STL中,unordered_multiset容器提供了一个快速查找元素的标准库函数equal_range()。以关键字值作为参数输入,equal_range()函数返回pair类型的迭代器范围,表示在容器中所有key与输入的key相同的元素的范围。如果没有任何元素与输入的key值相同,则返回的迭代器范围会指向容器中元素的最后一个。equal_range()函数能够高效地获取无序多重集合中的特定元素。