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_map
与map
都是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
消耗更多的内存,因为它需要存储哈希表。