C++ STL中的multiset::upper_bound()及其示例
在C++ STL中,multiset是一个很有用的容器。它可以存储相同元素并保持排序。如果你需要找到某个元素出现的位置或插入一个元素,multiset::upper_bound()方法可能是你需要的方法。
multiset::upper_bound()
multiset::upper_bound()方法返回一个指向第一个大于指定值的元素的迭代器。如果没有符合条件的元素,则返回multiset.end()。这里所说的“大于”指的是按照multiset内部元素排序的方式。
下面是multiset::upper_bound()方法的定义:
iterator upper_bound (const value_type& val) const;
其中,val
是需要找到的值。
示例
下面我们给出一些multiset::upper_bound()的示例代码。
示例1:找到multiset中第一个大于指定值的元素
#include <iostream>
#include <set>
int main()
{
std::multiset<int> ms = { 3, 4, 5, 5, 5, 7, 7, 8 };
int val = 6;
auto it = ms.upper_bound(val);
if (it != ms.end()) {
std::cout << "The first element greater than " << val << " is " << *it << std::endl;
}
else {
std::cout << "No element greater than " << val << " found." << std::endl;
}
return 0;
}
输出:
The first element greater than 6 is 7
示例2:使用自定义比较器
#include <iostream>
#include <set>
struct MyCmp {
bool operator() (int a, int b) const {
return a % 10 < b % 10;
}
};
int main()
{
std::multiset<int, MyCmp> ms = { 23, 15, 37, 39, 49, 61, 82, 95 };
int val = 30;
auto it = ms.upper_bound(val);
if (it != ms.end()) {
std::cout << "The first element greater than " << val << " is " << *it << std::endl;
}
else {
std::cout << "No element greater than " << val << " found." << std::endl;
}
return 0;
}
输出:
The first element greater than 30 is 61
结论
multiset::upper_bound()方法是一个非常有用和灵活的方法,可以帮助我们在multiset容器中查找元素或插入元素。我们只需按照正确的方式使用它就可以了。