国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

STL 關聯(lián)式容器 Set與Map的用法

2019-11-08 19:47:25
字體:
來源:轉載
供稿:網(wǎng)友

C++的標準模板庫(簡稱STL)是一個容器和算法的類庫。容器往往包含同一類型的數(shù)據(jù)。

set是一種關聯(lián)式容器,其特性如下:

set以RBTree作為底層容器所得元素的只有key沒有value,value就是key不允許出現(xiàn)鍵值重復所有的元素都會被自動排序不能通過迭代器來改變set的值,因為set的值就是鍵

定義一個元素為整數(shù)的集合a,可以用set<int> a;

基本操作:對集合a中元素的有插入元素:a.insert(1);刪除元素(如果存在):a.erase(1);判斷元素是否屬于集合:if (a.find(1) != a.end()) ...返回集合元素的個數(shù):a.size()將集合清為空集:a.clear()

中序遍歷:類似vector遍歷(用迭代器)

反向遍歷:利用反向迭代器reverse_iterator:

    set<int> s;  set<int>::reverse_iterator rit;  for(rit=s.rbegin();rit!=s.rend();rit++)

元素的刪除:s.erase(2);  s.clear();

元素的檢索:find(),若找到,返回該值迭代器的位置,否則返回最后一個元素后面一個位置s.end()

           it=s.find(5); if(it==s.end()) cout<<"not find"<<endl;else cout<<*it<<endl;

map:一樣是關聯(lián)式容器,它們的底層容器都是紅黑樹,區(qū)別就在于map的值不作為鍵,鍵和值是分開的。它的特性如下:

map以RBTree作為底層容器所有元素都是鍵+值存在不允許鍵重復所有元素是通過鍵進行自動排序的map的鍵是不能修改的,但是其鍵對應的值是可以修改的

在map中,一個鍵對應一個值,其中鍵不允許重復,不允許修改,但是鍵對應的值是可以修改的。

 Map基本操作:

              數(shù)據(jù)的插入:在構造map容器后,我們就可以往里面插入數(shù)據(jù)了。這里講三種插入數(shù)據(jù)的方法:第一種:用insert函數(shù)插入pair數(shù)據(jù)           Map<int, string> mapStudent;            mapStudent.insert(pair<int, string>(1, “student_one”));

第二種:用insert函數(shù)插入value_type數(shù)據(jù)           Map<int, string> mapStudent;           mapStudent.insert(map<int, string>::value_type (1, “student_one”));第三種:用數(shù)組方式插入數(shù)據(jù)

            Map<int, string> mapStudent;            mapStudent[1] =       “student_one”;            mapStudent[2] = “student_two”;

在往map里面插入了數(shù)據(jù),我們怎么知道當前已經(jīng)插入了多少數(shù)據(jù)呢,可以用size函數(shù):             Int nSize = mapStudent.size();

                  數(shù)據(jù)的查找(包括判定這個關鍵字是否在map中出現(xiàn)):

這里給出三種數(shù)據(jù)查找方法第一種:用count函數(shù)來判定關鍵字是否出現(xiàn),但是無法定位數(shù)據(jù)出現(xiàn)位置第二種:用find函數(shù)來定位數(shù)據(jù)出現(xiàn)位置它返回的一個迭代器,當數(shù)據(jù)出現(xiàn)時,它返回數(shù)據(jù)所在位置的迭代器,如果map中沒有要查找的數(shù)據(jù),它返回的迭代器等于end函數(shù)返回的迭代器Int main(){            Map<int, string> mapStudent;            mapStudent.insert(pair<int, string>(1, “student_one”));            mapStudent.insert(pair<int, string>(2, “student_two”));            mapStudent.insert(pair<int, string>(3, “student_three”));            map<int, string>::iterator iter;            iter = mapStudent.find(1);            if(iter != mapStudent.end())            {                   Cout<<”Find, the value is ”<<iter->second<<endl;            }            Else            {               Cout<<”Do not Find”<<endl;            }}

第三種:這個方法用來判定數(shù)據(jù)是否出現(xiàn)Lower_bound函數(shù)用法,這個函數(shù)用來返回要查找關鍵字的下界(是一個迭代器)Upper_bound函數(shù)用法,這個函數(shù)用來返回要查找關鍵字的上界(是一個迭代器)例如:map中已經(jīng)插入了1,2,3,4的話,如果lower_bound(2)的話,返回的2,而upper-bound(2)的話,返回的就是3Equal_range函數(shù)返回一個pair,pair里面第一個變量是Lower_bound返回的迭代器,pair里面第二個迭代器是Upper_bound返回的迭代器,如果這兩個迭代器相等的話,則說明map中不出現(xiàn)這個關鍵字,程序說明mapPair = mapStudent.equal_range(2);if(mapPair.first == mapPair.second)            cout<<”Do not Find”<<endl;

             數(shù)據(jù)的遍歷:

第一種:應用前向迭代器            map<int, string>::iterator iter;            for(iter = mapStudent.begin(); iter != mapStudent.end(); iter++)                 Cout<<iter->first<<”        ”<<iter->second<<end;第二種:應用反相迭代器            map<int, string>::reverse_iterator iter;            for(iter = mapStudent.rbegin(); iter != mapStudent.rend(); iter++)                  Cout<<iter->first<<”        ”<<iter->second<<end;第三種:用數(shù)組方式            int nSize = mapStudent.size()            for(int nIndex = 1; nIndex <= nSize; nIndex++)                  Cout<<mapStudent[nIndex]<<end;

              數(shù)據(jù)的清空與判空:

清空map中的數(shù)據(jù)可以用clear()函數(shù),判定map中是否有數(shù)據(jù)可以用empty()函數(shù),它返回true則說明是空map7.            數(shù)據(jù)的刪除這里要用到erase函數(shù),它有三個重載了的函數(shù)迭代器刪除            iter = mapStudent.find(1);            mapStudent.erase(iter);用關鍵字刪除            Int n = mapStudent.erase(1);//如果刪除了會返回1,否則返回0用迭代器,成片的刪除            一下代碼把整個map清空            mapStudent.earse(mapStudent.begin(), mapStudent.end());            //成片刪除要注意的是,也是STL的特性,刪除區(qū)間是一個前閉后開的集合8.            其他一些函數(shù)用法


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 洛浦县| 渑池县| 石棉县| 西平县| 莲花县| 内丘县| 偃师市| 台中县| 兰州市| 苏尼特右旗| 贞丰县| 安远县| 安西县| 平谷区| 石嘴山市| 玉田县| 锡林郭勒盟| 陇川县| 桐城市| 西吉县| 徐州市| 通江县| 广西| 海盐县| 临湘市| 徐水县| 象山县| 方正县| 垦利县| 江西省| 确山县| 新乡市| 保山市| 广宁县| 定兴县| 鲁山县| 苍山县| 开远市| 武清区| 玉溪市| 栾城县|