C++學習筆記 —— STL之set和map

文章目錄


這裏把set和map放到一塊因爲兩者都是關聯性容器,也就是說他們的存儲順序與放入元素順序不同,他們會自動維護一個容器中元素的順序。而且他們的api有很多相似之處。

set 集合

https://blog.csdn.net/sevenjoin/article/details/81908754
https://blog.csdn.net/ktigerhero3/article/details/78273497
set容器 不允許重複值 set是隻讀,他會自己排序,所以不能修改set裏的元素比如不能set[3] = 4
multiSet 與set完全相同,唯一不同就是他允許重複元素. set和multiset底層都是紅黑樹實現的.

#include <iostream>
#include <string>
#include <set>
#include <vector>

using namespace std;

int main()
{
    set<int> arraySet;
    // 插入元素,set是有序的會自動對插入的數據進行排序,不能指定位置插,因爲他會自己維護順序
    // 關聯式容器
    arraySet.insert(7);//返回的是一個bool值,若插入重複元素返回false
    arraySet.insert(4);
    arraySet.insert(5);
    arraySet.insert(6);
    arraySet.insert(5);
    //遍歷
    set<int>::iterator it;  // it是迭代器,前面是他的類型
    // 遍歷set集合,使用auto代替迭代器類型
    for (it = arraySet.begin(); it != arraySet.end(); it++) {
        cout << *it << ",";
    }  // 4, 5, 6, 7
    cout << endl;
    //大小
    cout << arraySet.size() << endl;  // 4

    //查找元素
    cout << *arraySet.find(5) << endl;  // 5 返回找到元素的迭代器,如果找不到則返回end()迭代器。
    if (arraySet.find(5) != arraySet.end()) {
        cout << "find num in set" << endl;
    } else {
        cout << "do not find num in set" << endl;
    }
    //刪除元素
    arraySet.erase(7);
    //返回元素個數
    cout << arraySet.count(5) << endl;  // 1 返回某個值元素的個數,因爲set是非重複的,結果爲0或1,而Multiset就可以是多個
    cout << arraySet.count(3) << endl;  // 0

    cout << *arraySet.end() << endl;  // 4 指向最後一個元素的後面一個位置所以值不確定

    // 使用set給vector去重
    vector<int> vec;
    vec = {1, 2, 3, 4, 8, 9, 3, 2, 1, 0, 4, 8};  //初始化vector
    set<int> st(vec.begin(), vec.end());         // 初始化Set,把vector放到set中,set自動去重
    vec.assign(st.begin(), st.end());            // 再把set元素放回到vector中。
}

map

map會根據key自動排序,第一元素爲key值,第二元素爲value,不允許有兩個相同的key值
MultiMap與map唯一區別是key值是可以重複的.


#include <iostream>
#include <map>

using namespace std;

void printMap(map<int, int> mapT)
{
    for (auto iter = mapT.begin(); iter != mapT.end(); iter++) {
        cout << "<" << iter->first << "," << iter->second << ">" << endl;
    }
    cout << endl;
}

int main()
{
    //使用數組方式初始化map
    map<int, int> mapT;
    mapT[1];    //會初始化key=1,value=0
    mapT[2]++;  //會初始化key=2,value=1
    printMap(mapT);

    // map插入數據三種方式
    map<int, int> m;
    m.insert(pair<int, int>(1, 10));  //插入key爲1 value爲10
    m.insert(make_pair(2, 20));       //插入<2,20>
    m[4] = 40;                        //插入<4,40>
    printMap(m);

    m.size();
    //刪除
    m.erase(1); //刪除key值爲1的鍵值對
    //查找  返回的是一個迭代器
    map<int,int>:: iterator it = m.find(2);
    if (it != m.end())
    {
        cout<< "find key: " << it->first << " value: " << it->second << endl;
    }
    
    
}

https://juejin.im/entry/5b38f3b6e51d4558de5c0139

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章