cpp中各种容器的简单使用

vector

#include <vector>

vector<int> vec; // 创建一个空的int型vector
vec.push_back(1); // 在vector末尾添加一个元素
int val = vec[0]; // 访问第一个元素
vec.size(); // 返回vector中元素的数量
vec.begin(); // 返回指向第一个元素的迭代器
vec.end(); // 返回指向最后一个元素之后位置的迭代器

deque(双端队列)

#include <deque>

deque<int> deq; // 创建一个空的int型deque
deq.push_back(1); // 在deque末尾添加一个元素
deq.push_front(2); // 在deque前端添加一个元素
int val = deq[0]; // 访问第一个元素

list 列表

#include <list>

list<int> lst; // 创建一个空的int型list
lst.push_back(1); // 在list末尾添加一个元素
lst.push_front(2); // 在list前端添加一个元素
int val = lst.front(); // 访问第一个元素
lst.pop_front(); // 删除第一个元素

map关联容器

#include <map>

map<string, int> countMap; // 创建一个string到int的映射
countMap["apple"] = 1; // 添加或修改映射
map.insert(pair<int, int>(nums[i], i)); 
int val = countMap["apple"]; // 访问映射中的值
countMap.find("apple"); // 查找键为"apple"的元素,返回迭代器

set集合

在C++中,set容器是一种关联容器,它内部使用红黑树实现,并且每个元素都是唯一的。如果在set中插入一个已经存在的元素,那么该操作不会改变set,元素不会被再次插入。

#include <set>

set<int> mySet; // 创建一个int型的集合
mySet.insert(1); // 插入元素
mySet.count(1); // 检查元素是否存在

 unordered_map(无序映射)

#include <unordered_map>

unordered_map<string, int> umap; // 创建一个string到int的无序映射
umap["apple"] = 1; // 添加或修改映射
int val = umap["apple"]; // 访问映射中的值
umap.find("apple"); // 查找键为"apple"的元素,返回迭代器

unordered_set(无序集合)

#include <unordered_set>

unordered_set<int> uset; // 创建一个int型的无序集合
uset.insert(1); // 插入元素
uset.count(1); // 检查元素是否存在
uset.find(1);

stack

#include <stack>

stack<int> stk; // 创建一个int型的栈
stk.push(1); // 压栈
int val = stk.top(); // 访问栈顶元素
stk.pop(); // 出栈

queue

#include <queue>

queue<int> que; // 创建一个int型的队列
que.push(1); // 入队
int val = que.front(); // 访问队首元素
que.pop(); // 出队

priority_queue

#include <queue>

priority_queue<int> pq; // 创建一个int型的优先队列
pq.push(1); // 入队
int val = pq.top(); // 访问最高优先级元素
pq.pop(); // 出队

unordered_mapmap都是C++ STL中用于存储键值对的关联容器,但它们在内部实现和性能特点上有所不同。

内部实现

  • map:基于红黑树实现,是一种自平衡的二叉搜索树。在map中,元素是按照键的顺序排序的。
  • unordered_map:基于哈希表实现。在unordered_map中,元素是无序的,它们是根据键的哈希值来存储和访问的。

性能特点

  • 查找、插入和删除操作的时间复杂度
    • map:由于是基于红黑树,这些操作的平均时间复杂度是O(log n)。
    • unordered_map:基于哈希表,理想情况下(没有哈希冲突),这些操作的平均时间复杂度是O(1)。但在最坏情况下(如哈希冲突严重时),时间复杂度会退化到O(n)。
  • 元素顺序
    • map:元素按键的升序排列。
    • unordered_map:元素无特定顺序,因为它们是根据哈希值存储的。

使用场景

  • 如果你需要元素按键有序排列,或者你需要进行有序遍历,应该使用map
  • 如果你只关心快速的查找、插入和删除操作,并且不需要元素有序,那么unordered_map可能是更好的选择。

其他差异

  • 内存使用unordered_map通常比map消耗更多的内存,因为它需要存储哈希表。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值