STL中vector、list、deque和map的區別
map映照容器的資料結構是採用紅黑樹來實現的,插入鍵值的元素不允許重複,比較函式只對元素的鍵值進行比較,元素的各項資料可通過鍵值檢索出來。
使用map容器需要標頭檔案包含語句“#include<map>”, map檔案也包含了對multimap多重映照容器的定義。
1、map建立、元素插入和遍歷訪問
建立map物件,鍵值與映照資料的型別由自己定義。在沒有指定比較函式時,元素的插入位置是按鍵值由小到大插入到黑白樹中去的,下面這個程式詳細說明了如何操作map容器。
1#include <map>
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[
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
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<int, char> 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<int, char> :: 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<int, char> m ;
14 //插入元素,按鍵值的由小到大放入黑白樹中15 m[25] ='m' ;
16 m[28] ='k' ;
17 m[10] ='x' ;
18 m[30] ='a' ;
19 //反向遍歷元素20 map<int, char> :: 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<int, char> m ;
14 //插入元素,按鍵值的由小到大放入黑白樹中15 m[25] ='m' ;
16
相關推薦
STL中vector、list、deque和map的區別
map映照容器的元素資料是一個鍵值和一個映照資料組成的,鍵值與映照資料之間具有一一映照的關係。 map映照容器的資料結構是採用紅黑樹來實現的,插入鍵值的元素不允許重複,比較函式只對元素的鍵值進行比較,元素的各項資料可通過鍵值檢索出來。 使用map容器需要標頭檔案包含語句“#
C++中 vector、list、deque、set、map的底層實現
stl容器區別: vector list deque set map-底層實現 stl容器區別: vector list deque set map (轉) 在STL中基本容器有: vector、list、deque、set、map set 和map
STL 整理(map、set、vector、list、stack、queue、deque、priority_queue)
向量(vector) <vector> 連續儲存的元素<vector> Vector<int>c; c.back() 傳回最後一個數據,不檢查這個資料是否存在。 c.clear() 移除容器中所有資料。 c.empty()
STL 容器區別:vector、list、deque、set、map的底層實現
1、set和map 比較 \ set map 共同點 都是無序的儲存元素,只是通過它提供的藉口對裡面的元素進行訪問,底層都是採用紅黑樹實現 不同點 集合,用來判斷某一個元素是不是在一個組裡面,使用
C++的STL容器之順序性容器vector、list、deque
STL對定義的通用容器分三類:順序性容器、關聯式容器和容器介面卡。順序性容器:vector、list、deque關聯性容器:set、multiset、map、multimap容器介面卡:stack、queue、priority_queue本篇主要總結順序性容器:(btw:獲取
STL空間配置器、vector、list、deque、map復習
管理 其他 過程 prev 得到 大於 新元素 use 總量 本文寫於2017-03-03,從老賬號遷移到本賬號,原文地址:https://www.cnblogs.com/huangweiyang/p/6440830.html STL的六大組件:容器、算法、叠代器、空間配置
C++STL中vector容器 begin()與end()函式、front()與back()
begin函式: 函式原型: iterator begin(); const_iterator begin(); 功能: 返回一個當前vector容器中起始元素的迭代器。 end函式: 函式原型: iterator end(); const_iterat
vector、list、map、set中的erase用法
(1)list與vector list與vector中的erase用法相同,它們的 erase 函式會返回指向下一個元素的迭代器,因此在遍歷時,只需要 it = c.erase(it); 即可。如示例程式碼: vector<int>::iterator
[C++]STL中vector容器 begin()與end()函式、front()與back()的用法
本部落格轉自http://blog.csdn.net/duan19920101/article/details/51679517 一、begin函式 函式原型: iterator begin(); const_iterator begin(); 功能: 返回一個當
C++STL中vector容器 begin()與end()函式、front()與back()的用法
一、begin函式 函式原型: iterator begin(); const_iterator begin(); 功能: 返回一個當前vector容器中起始元素的迭代器。 二、end函式 函式原型: iterator end(); const_iterator end(
從零開始_學_資料結構(五)——STL(map、set、list、vector)
STL容器 前注: STL(標準模板庫)是一個C++的軟體庫,也是C++標準程式庫的一部分。 這些容器,應該都是STL裡面的一個類。 vector封裝陣列、list封裝連結串列、map和set封裝二叉樹 一、list 在不懂的時候,list可以理解為雙向連結串列(很像,
序列式容器vector、list、deque比較
vector :vector擁有一段連續的記憶體空間,能非常好的支援隨即存取,即[]操作符,但由於它的記憶體空間是連續的,所以在中間進行插入和刪除會造成記憶體塊的拷貝,另外,當插入較多的元素後,預留記憶體空間可能不夠,需要重新申請一塊足夠大的記憶體並把原來的資料拷貝到新的記憶
Spring中使用Map、Set、List、數組、屬性集合的註入方法配置文件
查看 main list highlight 配置 spring配置 pla lec while (1)下邊的一個Java類包含了所有Map、Set、List、數組、屬性集合等這些容器,主要用於演示spring的註入配置; [java] view plain c
Map、List、Set在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: 將string、list、map、自己定義的對象保存到redis中
n) spa 存儲 div ber sys mil 操作 write 一、操作string 、list 、map 對象 1、引入jar: jedis-2.1.0.jar 2、代碼 /
集合框架ArrayList、List、Vector+JAVA學習筆記-DAY15
15.01_集合框架(物件陣列的概述和使用) A:案例演示 需求:我有5個學生,請把這個5個學生的資訊儲存到陣列中,並遍歷陣列,獲取得到每一個學生資訊。 Student[] arr = new Student[5];
圖解STL中演算法的分類、簡介及其Demo
STL中包含演算法標頭檔案<algorithm>就可以使用其中的演算法了,使用這些通用的演算法可以使得程式碼更加簡單、易讀、通用。但是這些演算法有哪些呢?以及這些演算法的職能又是什麼?其實這些東西,候捷大師在他的《STL原始碼剖析》中都有列舉,且FluentCPP有一篇文章1
C++常用的容器(vector、set、list、map)
C++ STL中最基本以及最常用的類或容器無非就是以下幾個: string vector set list map 下面就依次介紹它們,並給出一些最常見的最實用的使用方法,做到快速入門。 string 首先看看我們C語言一般怎麼使用字串的 c
Java中Array、List、ArrayList的區別
Array Array(陣列)是基於索引(index)的資料結構,它使用索引在陣列中搜索和讀取資料是很快的。 Array獲取資料的時間複雜度是O(1),但是要刪除資料卻是開銷很大,因為這需要重排陣列中的所有資料。 List List—是一個有序的
python知識整理--議可變物件和不可變物件以及str、list、tuple、dict、set
可變物件:變數、list 不可變物件:str、tuple、dict、set 1、變數是可變的不用多說,變數賦值一次便改變一次。 2、list 可變物件,可對list進行如下新增刪除排序等操作。 list = [2,3,5,1,2] list.append(8) list.insert(0,