在 C++ STL 中的multimap lower_bound() 函数应用

在 C++ STL 中的multimap lower_bound() 函数应用

C++ STL 中的 multimap 是一种关联式容器,可存储多个键值相同的元素。为了方便用户操作,multimap 提供了许多成员函数。其中,lower_bound() 函数是比较常用的一个。

lower_bound() 函数介绍

lower_bound() 函数的作用是查找 multimap 中第一个键值大于或等于给定键值的元素的迭代器。

语法如下:

multimap::iterator lower_bound (const key_type& key);

其中,key_type 表示要查找的键值的数据类型,此处使用 const 引用传入 key 的值。

返回值为一个 multimap 迭代器,指向 multimap 中第一个键值大于或等于给定键值的元素。

需要注意的是,如果查找的键值大于 multimap 中任何元素的键值,则返回 multimap.end()。

lower_bound() 函数的使用

接下来,我们通过一个例子来演示 lower_bound() 函数的使用。

#include <iostream>
#include <map>
using namespace std;

int main()
{
    multimap<int, int> myMap = {{1, 11}, {2, 22}, {3, 33}, {4, 44}, {5, 55}, {5, 555}};
    multimap<int, int>::iterator it;
    it = myMap.lower_bound(3);
    for (; it != myMap.end(); it++)
    {
        cout << "Key: " << it->first << " Value: " << it->second << endl;
    }
    return 0;
}

在上述代码中,我们定义了一个 multimap 对象 myMap,并初始添加了多个元素。接着,我们使用 lower_bound() 函数查找键值为 3 的元素。由于 multimap 容器中的元素默认按键值升序排列,输入结果为:

Key: 3 Value: 33
Key: 4 Value: 44
Key: 5 Value: 55
Key: 5 Value: 555

从输出结果中可以看出,lower_bound() 函数返回的迭代器指向了第一个键值大于或等于 3 的元素,即键值为 3 的元素,以及之后所有键值大于 3 的元素。

lower_bound() 和 upper_bound() 的区别

相信读者在使用 C++ STL 中的 multimap 时,可能会遇到两个类似的函数,分别是 lower_bound() 和 upper_bound()。

从字面上理解,lower_bound() 是查找第一个键值大于或等于给定键值的元素,而 upper_bound() 是查找第一个键值大于给定键值的元素。那么,两者区别在哪里呢?

其实,由于 multimap 容器允许多个键值相同的元素存在,因此 lower_bound() 和 upper_bound() 可能返回相同的迭代器。

举个例子:

multimap<int, int> myMap = {{1, 11}, {2, 22}, {3, 33}, {4, 44}, {5, 55}, {5, 555}};
multimap<int, int>::iterator it1, it2;
it1 = myMap.lower_bound(5);
it2 = myMap.upper_bound(5);
for (; it1 != it2; it1++)
{
    cout << "Key: " << it1->first << " Value: " << it1->second << endl;
}

在上述代码中,我们先定义一个 multimap myMap,初始添加了多个元素,其中包含两个键值为 5 的元素。接着,我们使用 lower_bound() 和 upper_bound() 函数查找键值为 5 的元素。

输出结果为:

Key: 5 Value: 55
Key: 5 Value: 555

下面分别解析 lower_bound() 和 upper_bound() 函数的执行过程:

  • lower_bound() 函数从迭代器起始位置开始查找,返回第一个键值大于或等于 5 的元素的迭代器。由于包含两个键值为 5 的元素,因此返回的迭代器指向第一个键值为 5 的元素。

  • upper_bound() 函数从迭代器起始位置开始查找,返回第一个键值大于 5 的元素的迭代器。由于包含两个键值为 5 的元素,因此返回的迭代器指向第二个键值为 5 的元素后面(即指向 555 的元素后面)。

综上所述,两个函数的区别在于,lower_bound() 函数返回第一个键值大于或等于给定键值的元素迭代器,而 upper_bound() 函数返回第一个键值大于给定键值的元素迭代器。

结论

通过本文,我们了解了 multimap lower_bound() 函数在 C++ STL 中的应用。lower_bound() 函数可用于查找 multimap 中第一个键值大于或等于给定键值的元素的迭代器,方便用户进行操作。与 upper_bound() 函数相比,lower_bound() 函数所查找的元素可能包含给定键值的元素,因此在使用时需要注意细节。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

C++ 教程