c STL庫容器之map

2021-08-18 06:00:25 字數 2644 閱讀 5090

map是stl的乙個關聯容器,它的特點是增加和刪除節點對迭代器的影響很小,除了那個操作節點,對其他的節點都沒有什麼影響。對於迭代器來說,可以修改實值,而不能修改key。它提供一對一(其中第乙個可以稱為關鍵字,每個關鍵字只能在map中出現一次,第二個可能稱為該關鍵字的值)的資料處理能力,由於這個特性,它完成有可能在我們處理一對一資料的時候,在程式設計上提供快速通道。這裡說下map內部資料的組織,map內部自建一顆紅黑樹(一種非嚴格意義上的平衡二叉樹),這顆樹具有對資料自動排序的功能,所以在map內部所有的資料都是有序的,後邊我們會見識到有序的好處。

(1) 預設構造: mapm;  構造乙個空的map,注意,必要時要給出模板引數中的 compare。需要時給出 alloc

(2) 範圍構造: mapm(iterator first, iteratorlast);  將迭代器[frist, last)範圍內的元素填入map中

(3) 拷貝構造: mapm(cosnt map& m2);  用m2構造m

(4) 初始化列表構造: mapm(initializer_listil)

由於map 的 value_type 是 pair型別,所以要構造成pair作為列表,這是三種構造 pair的方式

mapm,, ...}  // 通過 {}構造 pair

mapm  // 通過make_pair() 函式構造 pair

mapm  // 通過型別轉換構造pair

begin()                 返回指向map頭部的迭代器

clear()                刪除所有元素

count()                 返回指定元素出現的次數

empty()                如果map為空則返回true

end()                    返回指向map末尾的迭代器

equal_range()      返回特殊條目的迭代器對

erase()                  刪除乙個元素

find()                    查詢乙個元素

get_allocator()     返回map的配置器

insert()                  插入元素

key_comp()          返回比較元素key的函式

lower_bound()     返回鍵值》=給定元素的第乙個位置

max_size()            返回可以容納的最大元素個數

rbegin()               返回乙個指向map尾部的逆向迭代器

rend()                  返回乙個指向map頭部的逆向迭代器

size()                    返回map中元素的個數

swap()                 交換兩個map

upper_bound()     返回鍵值》給定元素的第乙個位置

value_comp()      返回比較元素value的函式

這裡我們著重講解erase函式

//測試erase函式

map::iterator it2 = mymap.begin();

while(it2 != mymap.end())

it2++;

}print(mymap);

erase刪除的是迭代器指向的資料。

還有find函式,函式原型是iterator find (const key_type& k); 返回值要用迭代器iterator接收

**如下:

//測試find函式   函式原型 iterator find (const key_type& k);   返回值用迭代器接收

map::iterator it1 = mymap.find(1);

cout << "返回元素" << it1->second << endl;

#include #include using namespace std;

//抽象乙個print函式,用來列印map中的值

void print(mapmymap)

}int main()

//以下**用來測試map的相關函式

/*mymap.clear(); //用來清除map中的所有元素

cout << "呼叫clear函式之後map的大小" << mymap.size() << endl;

*///測試find函式 函式原型 iterator find (const key_type& k); 返回值用迭代器接收

map::iterator it1 = mymap.find(1);

cout << "返回元素" << it1->second << endl;

//測試erase函式

map::iterator it2 = mymap.begin();

while(it2 != mymap.end())

it2++;

}print(mymap);

return 0;

}

執行結果為

c STL庫容器之向量vector

vector向量是一種順序行容器。相當於陣列,但其大小可以不預先指定,並且自動擴充套件。它可以像陣列一樣被操作,由於它的特性我們完全可以將vector 看作動態陣列。在建立乙個vector 後,它會自動在記憶體中分配一塊連續的記憶體空間進行資料儲存,初始的空間大小可以預先指定也可以由vector 預...

c STL庫容器之集合set

set是stl中一種標準關聯容器,其鍵值就是實值,實值就是鍵值,不可以有重複,所以我們不能通過set的迭代器來改變set的元素的值。它底層使用平衡的搜尋樹 紅黑樹實現,插入刪除操作時僅僅需要指標操作節點即可完成,不涉及到記憶體移動和拷貝,所以效率比較高。set,顧名思義是 集合 的意思,在set中元...

c STL容器之map容器

1.map中所有的元素都是pair 2.pair元素中第乙個元素為key,第二個元素為value 3.所有元素都會根據鍵值自動排序 4.map中不允許有重複的鍵,multimap中允許有重複的鍵 優點 可以根據key快速的找到value 一 建構函式 mapmp map const map mp 二...