在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++ 稍显复杂但更灵活。