c++容器介绍(时间复杂度)

博客分享了一个网址https://blog.youkuaiyun.com/jenus1/article/details/2227691 ,该网址给出了常用几个容器的常见用法及其复杂介绍。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

### C++ 中 `std::map` 容器时间复杂度 #### 插入操作时间复杂度 对于 `std::map` 的插入操作而言,在最坏情况下,其时间复杂度为 O(log n),这是因为该容器内部基于平衡二叉查找树实现(通常是红黑树),每次插入新元素时都需要调整树结构以保持平衡性质[^1]。 #### 删除操作时间复杂度 删除元素的操作同样具有 O(log n)时间复杂度。当从 `std::map` 移除某个键值对时,也需要执行一系列旋转和其他维护动作来确保整个数据结构仍然维持着平衡状态。 #### 查找操作时间复杂度 查询特定 key 是否存在以及访问对应 value 的过程也遵循同样的规律——平均情况下的性能表现为常数级别接近 O(1),但在理论上讲,由于涉及到了路径上的节点比较,所以严格来说应该是 O(log n)。 ```cpp // 示例代码展示如何测量 map 操作的时间消耗 #include <iostream> #include <chrono> #include <map> using namespace std; using namespace std::chrono; void measure_time_complexity() { high_resolution_clock::time_point t1 = high_resolution_clock::now(); // 创建并填充一个较大的 map 实例 map<int, string> largeMap; for (int i = 0; i < 1e6; ++i){ largeMap[i] = to_string(i); } // 测量插入/查找/删除单个元素所需时间 auto insert_start = high_resolution_clock::now(); largeMap[987654321] = "test"; duration<double> insert_duration = duration_cast<duration<double>>(high_resolution_clock::now() - insert_start); bool found = false; auto find_start = high_resolution_clock::now(); if(largeMap.find(987654321)!=largeMap.end()){ found=true; } duration<double> find_duration = duration_cast<duration<double>>(high_resolution_clock::now() - find_start); auto erase_start = high_resolution_clock::now(); if(found && largeMap.erase(987654321)){ ; } duration<double> erase_duration = duration_cast<duration<double>>(high_resolution_clock::now() - erase_start); cout << "Insert took: " << insert_duration.count()*1e9 << " ns\n"; cout << "Find took: " << find_duration.count()*1e9 << " ns\n"; cout << "Erase took: " << erase_duration.count()*1e9 << " ns\n"; } int main(){ measure_time_complexity(); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值