這些知識都是從別人關於c++知識的講解而自己手敲的,照著大佬們的敲一遍,加深自己的理解。
map是stl的乙個關聯容器,它提供一對一(其中第乙個可以稱為關鍵字,每個關鍵字只能在map**現一次,第二個可能稱為該關鍵字的值)的資料處理能力,由於這個特性,它完成有可能在我們處理一對一資料的時候,在程式設計上提供快速通道。這裡說下map內部資料的組織,map內部自建一顆紅黑樹(一種非嚴格意義上的平衡二叉樹),這棵樹具有對資料自動排序的功能,所以在map內部所有的資料都是有序的。
下面舉例說明什麼是一對一的資料對映。比如乙個班級種,每個學生的學號跟他的姓名就存在著一一對映的關係,這個模型用map可能輕易描述,很明顯學號用int描述,姓名用字串描述。
map提供了6個建構函式,這塊設計到記憶體分配器這些東西,略過不表。
通常用如下方法構造乙個map:
map<
int,string> mapstudent;
在構造map容器後,我們就可以往裡面插入資料了。
第一種:用insert函式插入pair資料。
#include
#include
#include
using
namespace std;
intmain()
}
另一種寫法:
make_pair();//返回型別為對應的pair型別,無需寫出類別,就可以生成乙個pair物件 ,例如:
make_pair(1,'@');
而不必費力的寫成
pair(1,'@');
第二種:用insert函式插入value_type資料,下面舉例說明
#include
#include
#include
using
namespace std;
intmain()
}
第三種:用陣列方式插入資料,下面舉例說明
#include
#include
#include
using
namespace std;
intmain()
以上三種用法,雖然都可以實現資料的插入,但是它們是有區別的,當然了,第一種和第二種在效果上是完成一樣的,用insert函式插入資料,在資料的插入涉及到集合的唯一性這個概念,即當map中有這個關鍵字時,insert操作時插入不了的,但是用陣列方式就不同了,它可以覆蓋以前該關鍵字對應的關鍵字對應的值。如下:
mapstudent.
insert
(map<
int, string>
::value_type (1,
"student_one"))
; mapstudent.
insert
(map<
int, string>
::value_type (1,
"student_two"))
;
上面這兩條語句執行後,map中1這個關鍵字對應的值是"student_one",第二條語句並沒有生效。那麼這就涉及到我們該怎麼知道insert語句是否插入成功的問題了,可以用pair來獲得是否插入成功,程式如下:
pairint,string>
::iterator,
bool
> insert_pair;
insert_pair = mapstudent.
insert
(map<
int,string>
::value_type(1
,"student_one"))
;
我們可以通過pair的第二個變數知道是否插入成功,它的第乙個變數返回的是乙個map的迭代器,如果插入成功的話insert_pair.second應該是true的,否則為false.
3.map的大小
再往map裡面插入了資料,我們怎麼知道當前已經插入了多少資料呢,可以用size()函式。
Objective C知識點滴記錄
1 方法呼叫基本語法 object method object methodwithinput input 方法可以有返回值 output object methodwithoutput output object methodwithinputandoutput input 還可以呼叫累方法 id...
python知識點滴記錄
1 定義對外暴露的介面,也就是其他模組可以import的東西 2 同時其作用還可以限制別from import 這類引入不必要的成員變數 all foo bar egg 引號巢狀有四種方式 都是雙引號時,前加轉義字元 都是單引號時,前加轉義字元 單引號中巢狀雙引號法。雙引號巢狀單引號。list ar...
C 多型知識點滴
函式的多種不同的實現方式即為多型 在繼承中,有時候基類的一些函式在派生類中也是有用的,但是功能不夠全或者兩者的功能實現方式就是不一樣的,這個時候就希望過載那個基類的函式,但是為了不再呼叫這個函式時,出現不知道呼叫基類的還是子類的情況出現,於是就提出了多型。多型可以說是面象物件語言的強大原因之一。多型...