📅  最后修改于: 2023-12-03 14:39:39.063000             🧑  作者: Mango
在C++中,std::map是一种关联式容器,其底层使用红黑树实现。红黑树是一种自平衡的二叉查找树,由于其平衡性能,导致在map的查找中效率非常高。
对于一个map对象,lower_bound()和upper_bound()是两种非常实用的成员函数。这两个函数都需要一个查找参数key,lower_bound()返回第一个大于或等于key的元素的迭代器,upper_bound()返回第一个大于key的元素的迭代器。
接下来我们将简要介绍C++中Pairs Map上的lower_bound()和upper_bound()的实现。
C++中的map对象是基于Red-Black树实现的。因此,在实现lower_bound()和upper_bound()之前,我们需要了解Red-Black树的一些基本知识。
具体实现步骤如下:
实现lower_bound()和upper_bound()的过程十分相似,唯一不同的是当curNode的值小于key时,需要递归遍历右子树找到upper_bound(),而不是递归遍历左子树。
#include<map>
#include<iostream>
int main(){
std::map<int, std::string>mp;
mp[1] = "one";
mp.insert(std::make_pair(2, "two"));
mp[3] = "three";
mp[4] = "four";
mp[5] = "five";
//lower_bound()实现
std::map<int, std::string>::iterator it1;
it1 = mp.lower_bound(3);
if (it1 != mp.end()) {
std::cout << "key: " << it1->first << " value: " << it1->second << std::endl;
}
else {
std::cout << "not found" << std::endl;
}
//upper_bound()实现
std::map<int, std::string>::iterator it2;
it2 = mp.upper_bound(3);
if (it2 != mp.end()) {
std::cout << "key: " << it2->first << " value: " << it2->second << std::endl;
}
else {
std::cout << "not found" << std::endl;
}
return 0;
}
上述代码中,我们首先定义了一个map对象mp,并向其中添加了一些元素。然后,我们使用lower_bound()函数在mp中查找键为3的元素。如果找到,则输出该元素的键和值,否则输出“not found”。同时,我们使用upper_bound()函数在mp中查找大于3的元素。同样,如果找到,则输出该元素的键和值,否则输出“not found”。
本文简单介绍了C++中Pairs Map上的lower_bound()和upper_bound()的实现。通过了解Red-Black树的基本原理,我们可以实现这两个函数,并在实际开发中应用它们。