1. 程式人生 > >STL中vector、list、deque和map的區別

STL中vector、list、deque和map的區別

map映照容器的元素資料是一個鍵值和一個映照資料組成的,鍵值與映照資料之間具有一一映照的關係。
        map映照容器的資料結構是採用紅黑樹來實現的,插入鍵值的元素不允許重複,比較函式只對元素的鍵值進行比較,元素的各項資料可通過鍵值檢索出來。
        使用map容器需要標頭檔案包含語句“#include<map>”, map檔案也包含了對multimap多重映照容器的定義。
        
1、map建立、元素插入和遍歷訪問
        
建立map物件,鍵值與映照資料的型別由自己定義。在沒有指定比較函式時,元素的插入位置是按鍵值由小到大插入到黑白樹中去的,下面這個程式詳細說明了如何操作map容器。
 1#include <map>
 2#include <string> 3#include <iostream> 4
 5using std :: cout ;
 6using std :: endl ;
 7using std :: string ;
 8using std :: map ;
 9
10int main()
11{
12     //定義map物件,當前沒有任何元素13     map<string,float> m ;
14     
15     //插入元素,按鍵值的由小到大放入黑白樹中16     m["Jack"=98.5 ;
17     m[
"Bomi"=96.0 ;
18     m["Kate"=97.5 ;
19     
20     //先前遍歷元素21     map<string,float> :: iterator it ;
22     for(it = m.begin() ; it != m.end() ; it ++)
23     {
24          cout << (*it).first <<" : "<< (*it).second << endl ;
25     }
26     
27     return0 ;
28
}
29         執行結果:
                          Bomi :96
                          Jack  :98.5
                          Kate  :97.5
        程式編譯試,會產生代號為“warning C4786” 的警告, “4786” 是標記符超長警告的代號。可以在程式的標頭檔案包含程式碼的前面使用"#pragma waring(disable:4786)" 巨集語句,強制編譯器忽略該警告。4786號警告對程式的正確性和執行並無影響。
2、刪除元素
        map映照容器的 erase() 刪除元素函式,可以刪除某個迭代器位置上的元素、等於某個鍵值的元素、一個迭代器區間上的所有元素,當然,也可使用clear()方法清空map映照容器。
        下面這個程式演示了刪除map容器中鍵值為28的元素:
 1#include <map> 2#include <string> 3#include <iostream> 4
 5using std :: cout ;
 6using std :: endl ;
 7using std :: string ;
 8using std :: map ;
 9
10int main()
11{
12    //定義map物件,當前沒有任何元素13    map<intchar> m ;
14    //插入元素,按鍵值的由小到大放入黑白樹中15    m[25='m' ;
16    m[28='k' ;
17    m[10='x' ;
18    m[30='a' ;
19    //刪除鍵值為28的元素20    m.erase(28) ;
21    //向前遍歷元素22    map<intchar> :: iterator it ;
23    for(it = m.begin() ; it != m.end() ; it ++)
24    {
25        //輸出鍵值與映照資料26        cout << (*it).first <<" : "<< (*it).second << endl ;
27    }
28    return0 ;
29}
30 執行結果:
                     10 : x
                     25 : m
                     30 : a
3、元素反向遍歷
      可以用反向迭代器reverse_iterator反向遍歷map映照容器中的資料,它需要rbegin()方法和rend()方法指出反向遍歷的起始位置和終止位置。
 1#include <map> 2#include <string> 3#include <iostream> 4
 5using std :: cout ;
 6using std :: endl ;
 7using std :: string ;
 8using std :: map ;
 9
10int main()
11{
12    //定義map物件,當前沒有任何元素13    map<intchar> m ;
14    //插入元素,按鍵值的由小到大放入黑白樹中15    m[25='m' ;
16    m[28='k' ;
17    m[10='x' ;
18    m[30='a' ;
19    //反向遍歷元素20    map<intchar> :: reverse_iterator rit ;
21    for( rit = m.rbegin() ; rit != m.rend() ; rit ++)
22    {
23        //輸入鍵值與映照資料24        cout << (*rit).first <<" : "<< (*rit).second << endl ;
25    }
26    return0 ;
27}
28 執行結果:
                  30 : a
                  28 : k
                  25 : m
                  10 : x
4、元素的搜尋
       
使用find()方法來搜尋某個鍵值,如果搜尋到了,則返回該鍵值所在的迭代器位置,否則,返回end()迭代器位置。由於map採用黑白樹資料結構來實現,所以搜尋速度是極快的。
       下面這個程式搜尋鍵值為28的元素:
 1#include <map> 2#include <string> 3#include <iostream> 4
 5using std :: cout ;
 6using std :: endl ;
 7using std :: string ;
 8using std :: map ;
 9
10int main()
11{
12    //定義map物件,當前沒有任何元素13    map<intchar> m ;
14    //插入元素,按鍵值的由小到大放入黑白樹中15    m[25='m' ;
16

相關推薦

STLvectorlistdequemap區別

map映照容器的元素資料是一個鍵值和一個映照資料組成的,鍵值與映照資料之間具有一一映照的關係。         map映照容器的資料結構是採用紅黑樹來實現的,插入鍵值的元素不允許重複,比較函式只對元素的鍵值進行比較,元素的各項資料可通過鍵值檢索出來。         使用map容器需要標頭檔案包含語句“#

C++ vectorlistdequesetmap的底層實現

stl容器區別: vector list deque set map-底層實現 stl容器區別: vector list deque set map (轉) 在STL中基本容器有: vector、list、deque、set、map set 和map

STL 整理(mapsetvectorliststackqueuedequepriority_queue)

向量(vector) <vector> 連續儲存的元素<vector> Vector<int>c; c.back()    傳回最後一個數據,不檢查這個資料是否存在。 c.clear()     移除容器中所有資料。 c.empty() 

STL 容器區別vectorlistdequesetmap的底層實現

1、set和map 比較 \ set map 共同點 都是無序的儲存元素,只是通過它提供的藉口對裡面的元素進行訪問,底層都是採用紅黑樹實現 不同點 集合,用來判斷某一個元素是不是在一個組裡面,使用

C++的STL容器之順序性容器vectorlistdeque

STL對定義的通用容器分三類:順序性容器、關聯式容器和容器介面卡。順序性容器:vector、list、deque關聯性容器:set、multiset、map、multimap容器介面卡:stack、queue、priority_queue本篇主要總結順序性容器:(btw:獲取

STL空間配置器vectorlistdequemap復習

管理 其他 過程 prev 得到 大於 新元素 use 總量 本文寫於2017-03-03,從老賬號遷移到本賬號,原文地址:https://www.cnblogs.com/huangweiyang/p/6440830.html STL的六大組件:容器、算法、叠代器、空間配置

C++STLvector容器 begin()與end()函式front()與back()

begin函式: 函式原型: iterator begin(); const_iterator begin(); 功能: 返回一個當前vector容器中起始元素的迭代器。 end函式: 函式原型: iterator end(); const_iterat

vectorlistmapset的erase用法

(1)list與vector     list與vector中的erase用法相同,它們的 erase 函式會返回指向下一個元素的迭代器,因此在遍歷時,只需要 it = c.erase(it); 即可。如示例程式碼: vector<int>::iterator

[C++]STLvector容器 begin()與end()函式front()與back()的用法

    本部落格轉自http://blog.csdn.net/duan19920101/article/details/51679517 一、begin函式 函式原型: iterator begin(); const_iterator begin(); 功能: 返回一個當

C++STLvector容器 begin()與end()函式front()與back()的用法

一、begin函式 函式原型: iterator begin(); const_iterator begin(); 功能: 返回一個當前vector容器中起始元素的迭代器。 二、end函式 函式原型: iterator end(); const_iterator end(

從零開始_學_資料結構(五)——STLmapsetlistvector

STL容器 前注: STL(標準模板庫)是一個C++的軟體庫,也是C++標準程式庫的一部分。 這些容器,應該都是STL裡面的一個類。 vector封裝陣列、list封裝連結串列、map和set封裝二叉樹 一、list 在不懂的時候,list可以理解為雙向連結串列(很像,

序列式容器vectorlistdeque比較

vector :vector擁有一段連續的記憶體空間,能非常好的支援隨即存取,即[]操作符,但由於它的記憶體空間是連續的,所以在中間進行插入和刪除會造成記憶體塊的拷貝,另外,當插入較多的元素後,預留記憶體空間可能不夠,需要重新申請一塊足夠大的記憶體並把原來的資料拷貝到新的記憶

Spring使用MapSetList數組屬性集合的註入方法配置文件

查看 main list highlight 配置 spring配置 pla lec while (1)下邊的一個Java類包含了所有Map、Set、List、數組、屬性集合等這些容器,主要用於演示spring的註入配置; [java] view plain c

MapListSet在Java的各種遍歷方法

try one out 循環 java light size i++ pre 一、Map的4種遍歷 Map<String, String> map = new HashMap<String, String>(); map.put("姓名", "

【redis,1】java操作redis: 將stringlistmap自己定義的對象保存到redis

n) spa 存儲 div ber sys mil 操作 write 一、操作string 、list 、map 對象 1、引入jar: jedis-2.1.0.jar 2、代碼 /

集合框架ArrayListListVector+JAVA學習筆記-DAY15

15.01_集合框架(物件陣列的概述和使用) A:案例演示 需求:我有5個學生,請把這個5個學生的資訊儲存到陣列中,並遍歷陣列,獲取得到每一個學生資訊。 Student[] arr = new Student[5];

圖解STL演算法的分類簡介及其Demo

STL中包含演算法標頭檔案<algorithm>就可以使用其中的演算法了,使用這些通用的演算法可以使得程式碼更加簡單、易讀、通用。但是這些演算法有哪些呢?以及這些演算法的職能又是什麼?其實這些東西,候捷大師在他的《STL原始碼剖析》中都有列舉,且FluentCPP有一篇文章1

C++常用的容器(vectorsetlistmap

C++ STL中最基本以及最常用的類或容器無非就是以下幾個: string vector set list map 下面就依次介紹它們,並給出一些最常見的最實用的使用方法,做到快速入門。 string 首先看看我們C語言一般怎麼使用字串的 c

JavaArrayListArrayList的區別

Array Array(陣列)是基於索引(index)的資料結構,它使用索引在陣列中搜索和讀取資料是很快的。 Array獲取資料的時間複雜度是O(1),但是要刪除資料卻是開銷很大,因為這需要重排陣列中的所有資料。 List List—是一個有序的

python知識整理--議可變物件不可變物件以及strlisttupledictset

可變物件:變數、list 不可變物件:str、tuple、dict、set 1、變數是可變的不用多說,變數賦值一次便改變一次。 2、list 可變物件,可對list進行如下新增刪除排序等操作。 list = [2,3,5,1,2] list.append(8) list.insert(0,