- 博客主頁: https://blog.csdn.net/qq_50285142
- 歡迎點贊👍收藏?關注?留言 📝 如有錯誤,敬請指正
- 🎈雖然生活很難,但我們也要一直走下去🎈
點擊👉STL超全總結👈跳轉主目錄
文章目錄
- 1. map介紹
- 2. 函式方法
- 3. 添加元素
- 4. 訪問元素
- 往期優質文章推薦
1. map介紹
映射類似于函式的對應關系,每個x對應一個y,而map是每個鍵對應一個值,會python的朋友學習后就會知道這和python的字典非常類似,
比如說:學習 對應 看書,學習 是鍵,看書 是值,
學習->看書
玩耍 對應 打游戲,玩耍 是鍵,打游戲 是值,
玩耍->打游戲
//頭檔案
#include<map>
//初始化定義
map<string,string>mp;
map<string,int>mp;
map<int,node>mp;//node是結構體型別
map特性:map會按照鍵的順序從小到大自動排序
2. 函式方法
| 代碼 | 含義 |
|---|---|
| mp.find(key) | 回傳鍵為key的映射的迭代器 O(logN) 注意:用find函式來定位資料出現位置,它回傳的一個迭代器,當資料出現時,它回傳資料所在位置的迭代器,如果map中沒有要查找的資料,它回傳的迭代器等于end函式回傳的迭代器, |
| mp.erase(it) | 洗掉迭代器對應的鍵和值O(1) |
| mp.erase(key) | 根據映射的鍵洗掉鍵和值 O(logN) |
| mp.erase(first,last) | 洗掉左閉右開區間迭代器對應的鍵和值 O(last-first) |
| mp.size() | 回傳映射的對數 O(1) |
| mp.clear() | 清空map中的所有元素 O(N) |
| mp.insert() | 插入元素,插入時要構造鍵值對 |
| mp.empty() | 如果map為空,回傳true,否則回傳false |
| mp.begin() | 回傳指向map第一個元素的迭代器(地址) |
| mp.end() | 回傳指向map尾部的迭代器(最后一個元素的下一個地址) |
| mp.rbegin() | 回傳指向map最后一個元素的迭代器(地址) |
| mp.rend() | 回傳指向map第一個元素的迭代器(地址) |
注意:
- mp.begin()和mp.end()用法:
用于正向遍歷map
map<int,int>mp;
mp[1] = 2;
mp[2] = 3;
mp[3] = 4;
auto it = mp.begin();
while(it!=mp.end())
{
cout<<it->first << " "<<it->second<<"\n";
it ++;
}
結果:
1 2
2 3
3 4
- mp.rbegin()和mp.rend()
用于逆向遍歷map
map<int,int>mp;
mp[1] = 2;
mp[2] = 3;
mp[3] = 4;
auto it = mp.rbegin();
while(it!=mp.rend())
{
cout<<it->first << " "<<it->second<<"\n";
it ++;
}
結果:
3 4
2 3
1 2
3. 添加元素
//直接宣告
map<string,string>mp;
//方式一:
mp["學習"] = "看書";
mp["玩耍"] = "打游戲";
//方式二:插入元素構造鍵值對
mp.insert(make_pair("vegetable","蔬菜"));
//方式三:
mp.insert(pair<string,string>("fruit","水果"));
//方式四:
mp.insert({"hahaha","wawawa"});
4. 訪問元素
6.4.1.下標訪問:(大部分情況用于訪問單個元素)
mp["菜哇菜"] = "強哇強";
cout<<mp["菜哇菜"]<<"\n";//只是簡寫的一個例子,程式并不完整
6.4.2.遍歷訪問:
map<string,string>::iterator it;
//1.迭代器訪問
for(it=mp.begin();it!=mp.end();it++)
{
// 鍵 值
// it是結構體指標訪問所以要用 -> 訪問
cout<<it->first<<" "<<it->second<<"\n";
//*it是結構體變數 訪問要用 . 訪問
//cout<<(*it).first<<" "<<(*it).second;
}
//2.智能指標訪問
for(auto i:mp)
cout<<i.first<<" "<<i.second<<endl;//鍵,值
//3.對指定單個元素訪問
map<char,int>::iterator it = mp.find('a');
cout<<it -> first <<" "<< it->second<<"\n";
//4.c++17特性
for(auto [x,y] : mp)
cout<<x<<" "<<y<<"\n";
//x,y對應鍵和值
還有兩種映射:
multimap
鍵可以重復,即一個鍵對應多個值,如要了解,可以自行搜索,
unordered_map
不排序,只映射,速度更快,方法基本一樣
如要了解,可查看相關博客
往期優質文章推薦
- 💛💚STL詳解,超全總結(快速入門STL)
- 💛🧡【期末復習】c++知識點大回顧,八篇文章讓你永不破防(一)
- 💛💚區間貢獻問題習題詳解
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/301404.html
標籤:python
下一篇:Spring
