日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

STL Map学习总结

發布時間:2025/3/15 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 STL Map学习总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、?Map是關聯容器,以鍵值對的形式進行存儲,方便進行查找,關鍵詞起到索引的作用,值則表示與索引相關聯的數據,以紅黑樹的結構實現,插入刪除等操作都可以在O(log n)時間內完成

2、它的特點是增加和刪除節點對迭代器的影響很小,除了那個操作節點,對其他的節點都沒有什么影響。對于迭代器來說,可以修改實值,而不能修改key。

//map關聯容器 //提供一對一的關系,一個map項包括兩個數據段key-value //key:關鍵字,一個key只能在map中出現一次(重復出現則覆蓋) //map會根據鍵值自動排序 //map.find(key) //map.count(key)計算key出現1次 //multimap.count(key) 可出現多次 //multimap.lower_bound(key) 第一個大于等于key的元素,這個函數用來返回要查找關鍵字的下界(是一個迭代器) //multimap.upper_bound(key) 第一個大于key的元素,這個函數用來返回要查找關鍵字的上界(是一個迭代器) //equal_range()函數返回一個pair,//pair里面第一個變量是Lower_bound返回的迭代器,pair里面第二個迭代器是Upper_bound返回的迭代器,//如果這兩個迭代器相等的話,則說明map中不出現這個關鍵字 //multimap可以有一對多的關系,沒有[]操作 //二叉樹:一個結點最多有兩個子結點 //平衡二叉樹:左樹和右樹的高度絕對值不超過1 //1、使用map需包含map類所在的頭文件:#include <map> //注意,STL頭文件沒有擴展名.h #include<iostream> #include<string> #include<map>using namespace std; int main() {//2、map的定義map<int, string> map1;//3、map四種插入方法map1.insert(map<int,string>::value_type(10,"aaaa"));map1.insert(pair<int, string>(20, "bbbb"));map1.insert(make_pair(30, "cccc"));map1[40] = "dddd";map1[40] = "eeee"; //覆蓋ddddfor (int i = 10; i < 50; i += 10){cout << map1[i]<< endl;}//4、迭代輸出。若為rbegin()和rend()為反向迭代for (map<int, string> ::iterator it = map1.begin(); it != map1.end(); it++){cout << it->first << ":" << it->second << endl;}cout << map1.size()<<endl;//5、利用find(key)和count(key)來發現一個鍵是否存在//map1.find(key) 返回一個迭代器指向鍵值為key的元素,如果沒有找到,返回指向map尾部的迭代器//cout << map1.count(40) << endl;map<int, string> ::iterator find_it = map1.find(40);cout << find_it->first << ":" << find_it->second << endl;//6、元素刪除:先查找元素,map<int ,string>::iterator it=map1.find(key); 找到之后map1.erase(it);//erase() 的返回值為0或者1.若為1表示刪除成功,否則刪除失敗map<int, string> ::iterator del_it = map1.find(10);map1.erase(del_it);//7、map中的swap函數,交換的是兩個容器而不是一個容器中的元素交換map<int, int> m1, m2,m3;m1.insert(pair<int, int>(1, 1));m1.insert(pair<int, int>(2, 2));m1.insert(pair<int, int>(3, 3));m2.insert(pair<int, int>(11, 11));m2.insert(pair<int, int>(12, 12));m2.insert(pair<int, int>(13, 13));m3.insert(pair<int, int>(21, 21));m3.insert(pair<int, int>(22, 22));m3.insert(pair<int, int>(23, 23));cout << "m1:" << endl;for (map<int, int> ::iterator it = m1.begin(); it != m1.end(); it++){cout << it->first << ":" << it->second << endl;}cout << "m2:" << endl;for (map<int, int> ::iterator it = m2.begin(); it != m2.end(); it++){cout << it->first << ":" << it->second << endl;}cout << "m3:" << endl;for (map<int, int> ::iterator it = m3.begin(); it != m3.end(); it++){cout << it->first << ":" << it->second << endl;}cout << "-----m1.swap(m2)測試-------" << endl;m1.swap(m2); //深拷貝。用m1.swap(m2)無法換回來cout << "m1:" << endl;for (map<int, int> ::iterator it = m1.begin(); it != m1.end(); it++){cout << it->first << ":" << it->second << endl;}cout << "m2:" << endl;for (map<int, int> ::iterator it = m2.begin(); it != m2.end(); it++){cout << it->first << ":" << it->second << endl;}cout << "-----swap(m3, m1);測試-------" << endl;swap(m1, m3);cout << "m1:" << endl;for (map<int, int> ::iterator it = m1.begin(); it != m1.end(); it++){cout << it->first << ":" << it->second << endl;}cout << "m3:" << endl;for (map<int, int> ::iterator it = m3.begin(); it != m3.end(); it++){cout << it->first << ":" << it->second << endl;}//8、sort函數,因為map中key按照升序進行排列的,所以不能使用sort函數//9、數據的清空與判空清空map中的數據可以用clear()函數,//10、判定map中是否有數據可以用empty()函數,它返回true則說明是空map/*map<string, string> map2;map2["張三"] = "小三";map2["李四"] = "小四";cout << map2["張三"] << endl;*/cout << "-----------------------multimap分割線-----------------------" << endl;multimap<int, string> multimap1; multimap1.insert(make_pair(20, "BBB"));multimap1.insert(make_pair(30, "CCC"));multimap1.insert(make_pair(50, "EEE"));multimap1.insert(make_pair(50, "FFF"));multimap1.insert(make_pair(50, "GGG"));multimap1.insert(make_pair(50, "HHH"));multimap1.insert(make_pair(40, "DDD"));multimap1.insert(make_pair(10, "AAA"));cout << "multimap1元素為:" << endl;for (multimap<int, string> ::iterator it = multimap1.begin(); it != multimap1.end(); it++){cout << it->first << ":" << it->second << endl;}cout << multimap1.count(50) << endl;multimap<int, string>::iterator it1 = multimap1.find(50);int count =multimap1.count(50);cout << "count測試" << endl;for (int i = 0; i < count; i++){cout << it1->first << ":" << it1->second << endl;it1++;}multimap<int, string> ::iterator it;multimap<int, string>::iterator begin, end;cout << "lower_bound.upper_bound測試" << endl;begin = multimap1.lower_bound(50);end = multimap1.upper_bound(50);for (it = begin; it != end; ++it){cout << it->first << ":" << it->second << endl;it++;}cout << "equal_range測試" << endl;auto pairTemp=multimap1.equal_range(50);begin = pairTemp.first;end = pairTemp.second;for (it = begin; it != end; ++it){cout << it->first << ":" << it->second << endl;it++;}return 0; }

運行結果:

?

總結

以上是生活随笔為你收集整理的STL Map学习总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。