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

📅  最后修改于: 2023-12-03 14:39:53.009000             🧑  作者: Mango

C++ STL中的multi-set equal_range()函数介绍

什么是multi-set?

在C++ STL(Standard Template Library)中,multi-set是一个容器,它允许存储多个键相同的元素,且这些元素按照一定的顺序排列。multi-set的实现采用了红黑树(Red-Black Tree)数据结构。

equal_range()函数概述

STL的multi-set容器提供了一个成员函数equal_range(),用于在容器中寻找与某个给定值相等的元素区间。它的函数原型如下:

pair<iterator, iterator> equal_range(const Key& key);

其中,pair是STL中的一个模板类,iterator是STL中的迭代器类,Key是要查找的元素类型。

equal_range()函数返回的是一个pair对象。pair中包含两个迭代器,第一个迭代器指向第一个与给定值相等的元素,第二个迭代器指向最后一个与给定值相等的元素的下一个位置。如果没有找到与给定值相等的元素,则返回一对迭代器,它们指向可以插入给定值的位置。

equal_range()函数的使用示例

下面是一个使用equal_range()函数的示例代码:

#include <iostream>
#include <set>

using namespace std;

int main() {
    // 创建一个multi-set
    multiset<int> ms = {1, 2, 2, 3, 4, 4, 4, 5};

    // 使用equal_range查找值为2的元素
    auto range = ms.equal_range(2);

    // 输出结果
    cout << "lower_bound position: " << distance(ms.begin(), range.first) << endl;
    cout << "upper_bound position: " << distance(ms.begin(), range.second) << endl;

    return 0;
}

输出结果为:

lower_bound position: 1
upper_bound position: 3

在这个示例中,我首先创建了一个multi-set ms,然后使用equal_range()函数查找值为2的元素。equal_range()函数返回一个pair对象,我将其保存在变量range中。最后,我输出了符合要求的元素区间的位置。

注意事项
  • 如果找到的元素区间为空,equal_range()函数返回的是两个相等的迭代器。
  • 如果要查找的元素不在multi-set中,equal_range()函数返回的迭代器指向可以插入新元素的位置。
  • STL的multiset容器是一个有序容器,使用equal_range()函数的前提条件是容器中元素是按照一定的顺序排列的。
总结

equal_range()函数是STL的multiset容器中一个非常有用的成员函数。通过使用equal_range()函数,我们可以快速地查找multi-set中与某个给定值相等的元素区间,并进行进一步的操作。