📅  最后修改于: 2023-12-03 14:59:49.969000             🧑  作者: Mango
在 C++ 中,std::set
和 std::multiset
是常用的集合容器,它们内部维护了一棵平衡二叉搜索树。在这些容器中,lower_bound()
和 upper_bound()
是常用的函数之一,用于查找指定元素在集合中的位置。
lower_bound()
函数返回一个指针,指向集合中第一个大于或等于指定元素的元素。如果集合中不存在大于或等于指定元素的元素,则返回指向集合末尾的指针。
以下是 lower_bound()
函数的示例代码:
#include <iostream>
#include <set>
int main() {
std::set<int> s{1, 2, 3, 4, 5};
// 返回一个指向值为3的元素的迭代器
std::set<int>::iterator it_low = s.lower_bound(3);
if (it_low != s.end()) {
std::cout << *it_low << std::endl; // 输出 3
}
// 查找集合中不存在的元素
std::set<int>::iterator it_not_found = s.lower_bound(6);
if (it_not_found == s.end()) {
std::cout << "Element not found!" << std::endl;
}
return 0;
}
在上面的示例代码中,我们使用 lower_bound()
函数找到了值为3的元素的位置。如果我们查找一个不存在的元素,函数会返回指向集合末尾的指针。
upper_bound()
函数返回一个指针,指向集合中第一个大于指定元素的元素。如果集合中不存在大于指定元素的元素,则返回指向集合末尾的指针。
以下是 upper_bound()
函数的示例代码:
#include <iostream>
#include <set>
int main() {
std::set<int> s{1, 2, 3, 4, 5};
// 返回一个指向值为4的元素的迭代器
std::set<int>::iterator it_up = s.upper_bound(3);
if (it_up != s.end()) {
std::cout << *it_up << std::endl; // 输出 4
}
// 查找集合中不存在的元素
std::set<int>::iterator it_not_found = s.upper_bound(5);
if (it_not_found == s.end()) {
std::cout << "Element not found!" << std::endl;
}
return 0;
}
在上面的示例代码中,我们使用 upper_bound()
函数找到了值为3的元素之后的位置,也就是值为4元素的位置。如果我们查找一个不存在的元素,则返回指向集合末尾的指针。
总结
lower_bound()
和 upper_bound()
函数是 std::set
和 std::multiset
容器中的重要成员函数。它们可以快速查找集合中指定元素的位置,对于处理多个元素值相同的情况尤其有用。本文中展示了使用这两个函数的示例代码,希望能对大家的学习有所启发。