在C++中,也有一套丰富的标准库数据结构(主要在 <vector>, <map>, <set>, <unordered_map>, <unordered_set> 等头文件中),它们可以和Python中的 list, dict, set 对应起来。下面是一个对比总结,帮你快速建立映射关系:
🟢 Python list ⇨ C++ 对应数据结构
| Python | C++ 等效 | 特性 |
|---|---|---|
list | std::vector | 动态数组,支持随机访问,插入删除效率较低(除非在尾部) |
std::list | 双向链表,插入删除效率高,但不支持随机访问 | |
std::deque | 双端队列,两端插入删除都快,支持随机访问 |
✅ 通常用 std::vector 替代 Python 的 list,除非你特别需要链表性质或双端操作。
🟡 Python dict ⇨ C++ 对应数据结构
| Python | C++ 等效 | 特性 |
|---|---|---|
dict | std::map | 基于红黑树,键有序,查找/插入/删除是 O(log n) |
std::unordered_map | 基于哈希表,键无序,查找/插入/删除是 O(1)(均摊) |
✅ 如果你不在乎顺序,用 unordered_map 更快;需要有序键值对,用 map。
🔵 Python set ⇨ C++ 对应数据结构
| Python | C++ 等效 | 特性 |
|---|---|---|
set | std::set | 红黑树实现,元素有序,去重 |
std::unordered_set | 哈希表实现,元素无序,去重,操作更快 |
✅ Python 的 set 更像 unordered_set,不过 C++ 提供有序和无序两种版本。
✅ 补充
| C++ 结构 | 类似Python | 用途 |
|---|---|---|
std::stack, std::queue | collections.deque, 手动控制 list | 先进后出 / 先进先出 |
std::priority_queue | heapq | 最小堆 / 最大堆 |
std::pair, std::tuple | tuple | 打包数据 |
std::array (C++11+) | tuple, list | 固定大小数组 |
举几个常见的数据结构操作的 Python 和 C++ 对照例子。这样你一眼就能看出来它们之间怎么映射、怎么用法类似。
🟢 1.
list⇨vector✅ Python
✅ C++
🟡 2.
dict⇨unordered_map✅ Python
✅ C++
(如果你要用有序的键,用
map)🔵 3.
set⇨unordered_set✅ Python
✅ C++
🔁 4. 遍历
✅ Python
for遍历✅ C++ 范围for循环(C++11 起)
排序、查找和过滤是常见的操作,C++ 和 Python 中的用法其实有一些相似,但也有各自的特点。我们一起看下这几个操作的对比:
🟢 1. 排序 (Sorting)
✅ Python
Python 的
list.sort()或sorted()用于排序,默认是升序的,可以用reverse=True降序排序,或者用key参数指定自定义排序。✅ C++
C++ 使用
std::sort来排序,std::sort默认升序排列。如果需要降序或自定义排序,可以传入比较函数。🟡 2. 查找 (Search)
✅ Python
Python 提供了
in操作符来检查元素是否在集合(如list,set,dict)中,index()方法可以查找元素的索引。✅ C++
C++ 有
std::find来查找元素,也可以使用count()来检查元素是否存在。🔵 3. 过滤 (Filter)
✅ Python
Python 使用
filter()或者列表推导式来进行过滤操作。✅ C++
C++ 使用
std::copy_if来过滤元素(结合标准库算法),需要用到额外的容器来存储过滤结果。🟣 小结
sort()更直观,C++ 通过std::sort提供了更高的灵活性和性能优化。in或index(),C++ 使用std::find和count来进行查找,功能上差不多,但 C++ 需要写得更详细些。filter()或列表推导式,C++ 使用std::copy_if结合 lambda 表达式来过滤,C++ 稍显复杂但更灵活。