[C++] Set, Map, Vector 資料結構的差別

1. Vector
Pros:
(1) 是擁有連續及動態(不指定大小)的儲存
(2) 支持[]操作符號,可以快速取得資料
(3) 節省空間
Cons:
(1) 內部插入新物件的效率極低
(2) 僅能在尾部插入物件 push_back()/pop_back(),不支援頭部的插入
(3) 動態插入物件的時候,整體 size 跟 capacity 都要重新調配拷貝與釋放

2. List
又可以被稱作 Linked List 包含一個前指針與後指針還有一個 Info 區塊
Pros:
(1) 不使用連續內存完成動態操作
(2) 可以在內部輕易的新增與刪除新資料
(3) 可以在兩邊進行 push, pop
Cons:
(1) 不能進行隨機訪問,即不支持[]操作子
(2) 相對於 vector 佔用更大的內存

3. Deque
double-end queue 在設計上是結合了 List 與 vector 的特色。
Pros:
(1) 隨機訪問方便,即支持[]操作子
(2) 可在內部方便新增與刪除操作
(3) 可在兩端進行 push, pop 等操作
Cons:
(1) 佔用多一些內存

4. Set, Map
Set 與 vector 的差別在於 Set 是利用紅黑樹去建立資料結構,Set 不含重複數據,Set 與 Map 的差別是 Set 只有一個Key 值,但是 Map 是有一組相對的 Key, Value 值。Map 與 HashMap 的差別是HashMap 利用 Hash Function 去增加搜尋速度,概念上與 space time trade-off 是一樣的。

int main()
{
    set st1;
    set::iterator it1;

    it1 = st1.find(40);
    if (it1 != st1.end()) //如果有找到的話就輸出
    {
        cout << *it1 << endl; 
    }
    st1.insert(10);
    st1.insert(40);
    if (it1 != st1.end()) //這次就能夠找到了
    {
        cout << *it1 << endl;
    }
}