在 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() 函数所查找的元素可能包含给定键值的元素,因此在使用时需要注意细节。