常用 STL 容器用法整理

C++ 程序设计

STL 模板

std::set

#include <set>

T 为已重载了 operator < 的类型

定义:
std::set<T> st;

插入元素:
T New_Elem; st.insert(New_Elem);
若元素已存在则什么都不会发生。

删除元素:
T Exist_Elem; st.erase(Exist_Elem);
若元素不存在则什么都不会发生,但是不建议这么干。

查找元素个数:
T Some_Elem; 
int exist_cnt = st.count(Some_Elem);
因为不允许重复所以只可能为 0 或 1.

查找元素位置:
T Some_Elem;
std::set<T>::iterator it = st.find(Some_Elem);
不存在返回 st.end()。

二分查找:
T Some_Elem;
std::set<T>::iterator it = st.lower_bound(Some_Elem);
返回首个不小于 Some_Elem 的元素的迭代器。
std::set<T>::iterator itt = st.upper_bound(Some_Elem);
返回首个大于 Some_Elem 的元素的迭代器。
不存在返回 st.end()。

清空:
st.clear();

容器信息:
int siz = (int) st.size()
bool emp = st.empty()

std::multiset

#include <set>

T 为已重载了 operator < 的类型

定义:
std::multiset<T> st;

插入元素:
T New_Elem; st.insert(New_Elem);
若元素已存在则会插入一个新的副本。

删除元素:
T Exist_Elem; st.erase(Exist_Elem);
会删除所有相同的元素。
若元素不存在则什么都不会发生,但是不建议这么干。

删除一个元素:
T Exist_Elem; st.erase(st.find(Exist_Elem));
若元素不存在则会 RE。

查找元素个数:
T Some_Elem; 
int exist_cnt = st.count(Some_Elem);

查找元素位置:
T Some_Elem;
std::set<T>::iterator it = st.find(Some_Elem);
一般来说是返回最前面的元素。可能与编译器实现有关。
不存在返回 st.end()。

二分查找:
T Some_Elem;
std::set<T>::iterator it = st.lower_bound(Some_Elem);
返回首个不小于 Some_Elem 的元素的迭代器。
std::set<T>::iterator itt = st.upper_bound(Some_Elem);
返回首个大于 Some_Elem 的元素的迭代器。
不存在返回 st.end()。

清空:
st.clear();

容器信息:
int siz = (int) st.size()
bool emp = st.empty()

std::map

#include <map>

K 为已重载了 operator < 的类型
T 为任意类型

定义:
std::map<K, T> mp;
可以进行嵌套,但不建议这么做。
std::map<K1, std::map<K1, T> > mp_;

插入元素:
K New_Elem; T value;
mp[New_Elem] = value;

删除元素:
K Exist_Elem; int remove_cnt = mp.erase(Exist_Elem);
会删除下标为 Exist_Elem 的元素。
若元素不存在则什么都不会发生。返回值为删除元素个数。

查找元素个数:
K Some_Elem; 
int exist_cnt = mp.count(Some_Elem);
因为不允许重复所以只可能为 0 或 1.
不推荐使用 K val = mp[Some_Elem]; 来查找可能不存在的元素,因为如果不存在则会新建节点,造成不必要空间浪费。

清空:
st.clear();

容器信息:
int siz = (int) st.size()
bool emp = st.empty()

std::queue

#include <queue>

T 为任意类型

std::queue<T> q;

加入元素:
T Some_Elem; q.push(Some_Elem);

弹出元素:
q.pop();
若队列为空则会 RE。

访问第一个元素:
T val = q.front();

访问最后一个元素:
T val = q.back();

容器信息:
int siz = (int) q.size();
bool emp = q.empty();

std::stack

#include <stack>

T 为任意类型

std::stack<T> q;

加入元素:
T Some_Elem; q.push(Some_Elem);

弹出元素:
q.pop();
若栈为空则会 RE。

访问第一个元素:
T val = q.top();

容器信息:
int siz = (int) q.size();
bool emp = q.empty();

std::deque

#include <deque>

T 为任意类型

std::deque<T> dq;

用法和 std::vector<T> 类似

访问元素:
T First_Elem = dq.front();
T Last_Elem = dq.back();
T Some_Elem = dq[val];

添删元素:
以下操作复杂度均为均摊常数。
T Some_Elem;
在末尾添加元素 dq.push_back(Some_Elem);
在开头添加元素 dq.push_front(Some_Elem);
在末尾删除元素 dq.pop_back();
在开头删除元素 dq.pop_front();

清空:
dq.clear();

容器信息:
int siz = (int) q.size();
bool emp = q.empty();

std::priority_queue

#include <queue>

T 为定义了 operator < 的类型

std::priority_queue<T> q;

访问元素:
T Top_Elem = q.top();

添删元素:
T Some_Elem; q.push(Some_Elem);
q.pop();
若队列为空则执行 pop() 会 RE。

容器信息:
int siz = (int) q.size();
bool emp = q.empty();
上一篇:Vue动态绑定class类名v-if等


下一篇:ES5新增方法--查找方法--forEach(),filter(),some()区别