map set lower_bound vector
时间: 2025-03-23 14:05:33 浏览: 27
### C++ STL 中 `map`、`set`、`lower_bound` 和 `vector` 的用法与差异
#### 关于 `std::vector`
`std::vector` 是一种动态数组容器,支持随机访问和高效的尾部插入操作。然而,在迭代过程中,如果集合为空或者很小,则其设置开销会高于 `QVector`[^1]。此外,相较于标准库中的其他实现方式,`QVector` 迭代产生的代码量也稍多一些。
对于实际应用而言,当处理大量数据时,`std::vector` 提供了更好的性能表现;而对于小型或频繁创建销毁的小型对象集合来说,可能需要考虑使用替代方案来减少内存分配带来的额外负担。
以下是简单的 `std::vector` 使用示例:
```cpp
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec = {1, 2, 3, 4};
for (const auto& elem : vec) {
std::cout << elem << " ";
}
}
```
---
#### 关于 `std::map`
`std::map` 是基于红黑树的数据结构,提供键值对存储功能并保持按键自动排序特性。它的时间复杂度通常为 O(log n),适用于查找频率较高的场景。
下面是一个基本的例子展示如何定义以及查询一个整数类型的映射表:
```cpp
#include <iostream>
#include <map>
int main() {
std::map<std::string, int> myMap;
myMap["one"] = 1;
if(myMap.find("two") != myMap.end()) {
std::cout << "Value of 'two': " << myMap["two"];
} else {
std::cout << "'two' not found";
}
return 0;
}
```
---
#### 关于 `std::set`
类似于 `std::map`,但是只保存唯一的键而无对应的值部分。同样利用平衡二叉搜索树作为底层机制保证元素有序排列且唯一存在。
这里给出一段程序片段说明怎样向集合添加新成员并且遍历整个集合作业:
```cpp
#include <iostream>
#include <set>
int main(){
std::set<double> s;
double value = 3.14;
s.insert(value);
for(auto it=s.begin();it!=s.end();++it){
std::cout<<*it<<"\n";
}
}
```
---
#### 关于 `std::lower_bound`
函数模板 `std::lower_bound` 返回指向第一个不小于给定目标值的位置的迭代器。此算法假设输入序列已经按照升序进行了预排序。
下面是演示寻找某个特定数值位置的方法之一:
```cpp
#include <algorithm>
#include <vector>
#include <iostream>
int main()
{
std::vector<int> v{1, 2, 4, 4, 5};
// 查找大于等于3的第一个位置
auto lb_it = std::lower_bound(v.begin(), v.end(), 3);
if(lb_it != v.end()){
std::cout << *lb_it ;
}
}
```
上述例子中我们尝试定位不低于数字三的那个索引处的内容是什么样的情况下的结果输出将是四因为它是满足条件最前面的一个选项[^2]。
---
阅读全文
相关推荐



















