• 常用 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();
    
  • 相关阅读:
    类型转换器(InitBinder 初始化绑定器)
    transient关键字的用法
    Handler
    SpringMVC数据校验
    java中进程与线程的三种实现方式
    初识webservice 服务
    javaMail
    UI测试_错题解析
    ognl
    Struts2数据校验
  • 原文地址:https://www.cnblogs.com/handwer/p/15388459.html
Copyright © 2020-2023  润新知