C++ STL中unordered_multiset equal_range()函数

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()函数能够高效地获取无序多重集合中的特定元素。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

C++ 教程