C++ STL中multiset equal_range()函数

C++ STL中multiset equal_range()函数

C++ STL中,multiset是一个内置的支持自动排序和自动去重的容器,而equal_range()函数则是multiset的一个非常常用的成员函数。它用于查找某个值在multiset中出现的范围,返回一个由两个迭代器组成的pair容器对象。

函数原型

对于一个multiset<T>对象msequal_range()函数原型如下:

std::pair<std::multiset<T>::const_iterator, std::multiset<T>::const_iterator> equal_range(const T& val) const;

其中,val是要查找的值,pair容器中包含的两个迭代器指向的就是最后一个小于等于val的元素和第一个大于val的元素,即查找范围为:

[第一个迭代器, 第二个迭代器)

如果没有找到对应值,则返回的两个迭代器都指向ms.end()

使用示例

在这里,我们通过一个简单的示例演示如何使用multisetequal_range()函数。假设我们需要统计某个班的学生考试成绩,并且对于每个分数值,我们要分别计算出其中的最高分和最低分。

为了实现这个功能,我们可以使用一个multiset<int>对象来存储所有的成绩,然后使用equal_range()函数查找每个不同的成绩值在multiset中的范围,然后从该范围内获取最高分和最低分即可。

以下是完整的代码实现:

#include <iostream>
#include <set>

int main()
{
    std::multiset<int> scores = { 89, 78, 92, 76, 89, 82, 91, 76, 92 };

    for (int score = 60; score <= 100; ++score)
    {
        auto range = scores.equal_range(score);
        if (range.first != scores.end() && range.second != scores.end())
        {
            std::cout << "Score " << score << ": min = " << *range.first << ", max = " << *(std::prev(range.second)) << '\n';
        }
    }

    return 0;
}

在这个例子中,我们首先将每个学生的成绩存储在了一个multiset<int>对象scores中。然后,我们使用一个循环来遍历60到100之间所有可能的成绩值,并使用equal_range()函数查找它们在scores中的范围。如果找到了范围,则输出范围内的最低分和最高分。

注意,std::prev()函数用于获取迭代器的前一个元素。由于std::multiset内部自动排序,因此迭代器之间的关系就对应着元素之间的大小关系。因此,使用std::prev()函数可以很容易地获得某个迭代器的前一个元素。

结论

multiset中的equal_range()函数是一个非常常用的成员函数,用于查找某个值在multiset中的范围。它的使用非常简单,并且实现起来也很容易。通过这个函数,我们可以方便地获取某个值在multiset中的出现次数,或者查找某个值的相邻元素。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

C++ 教程