#include


map

\(map\)是一棵紅黑樹,它作為一個容器儲存的是一個鍵值對另一個關鍵碼的映射。必須要定義鍵值類型的小於號。

聲明方法是:map<a,b> name;其中\(a\)\(b\)是數據類型,\(name\)是這棵紅黑樹的名字。

一般\(map\)都可以當做\(hash\)表來用,但是因為\(map\)內部是靠平衡樹維護的,所以復雜度是\(O(log)\)的,比一般的手寫\(hash\)要慢。但是\(map\)還支持中括號操作,所以一般情況下十分方便寫。

聲明方式

map<char,int> s;
map<char,int>::iterator it;

假設類型\(a\)\(char\),類型\(b\)\(int\),那么定義一個\(map\)和這個\(map\)的迭代器就是這樣寫。迭代器只支持訪問連續地址,所以就只能\(++it\)\(--it\)。如果我用這個\(map\)來統計每個字符出現的次數,那么就可以直接寫s[ch]++;

name.size()​

返回元素個數。

name.empty()​

判斷\(map\)是否為空,為空則是邏輯真,否則就是邏輯假。

name.clear()​

清空\(map\)

name.begin()/name.end()​

返回\(map\)的首迭代器和尾迭代器。左閉右開,所以尾迭代器為空。

對迭代器解除引用后會得到一個\(pair\)

name.insert(pair<a,b>)/name.erase(pair<a,b>\(或迭代器\))​

插入一個\(pair\)類型,刪除一個\(pair\)或者是迭代器。

name.find(x)​

返回一個迭代器,存的是一個第一關鍵字為\(x\)的二元組。若不存在,則返回\(name.end()\)

[]操作符

s[x]可以直接訪問第一關鍵字與x相等的二元組的第二關鍵字。但是如果不存在\(map\)就會先新建一個二元組,使得這個新建的二元組第一關鍵字為x,第二關鍵字為\(0\)。所以在使用[]操作符之前最好先\(find\)一下以x為第一關鍵字的二元組是否存在,不然用多了就會出現大量的無用二元組。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM