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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

C++ Maps MultiMaps

發(fā)布時間:2024/8/23 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++ Maps MultiMaps 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
C++ Maps & MultiMaps C++ Maps & MultiMaps

C++ Maps
是一種關(guān)聯(lián)式容器,包含“關(guān)鍵字/值”對。 C++ Multimapsmaps很相似,但是MultiMaps允許重復(fù)的元素。 1.begin()?返回指向map頭部的迭代器 2.clear()?刪除所有元素 3.count()?返回指定元素出現(xiàn)的次數(shù) ???語法: ???size_type count( const KEY_TYPE &key ); ???//返回map中鍵值等于key的元素的個數(shù) 4.empty()?如果map為空則返回true 5.end()?返回指向map末尾的迭代器 6.equal_range()?返回特殊條目的迭代器對 ???語法: ???pair equal_range( const KEY_TYPE &key ); ???返回兩個迭代器,指向第一個鍵值為key的元素和指向最后一個鍵值為key的元素 7.erase()?刪除一個元素 ???語法: ???void erase( iterator i );?//刪除i元素 ???void erase( iterator start, iterator end );?//刪除從start開始到end(不包括end)結(jié)束的元素 ???size_type erase( const key_type &key ); ???//刪除等于key值的所有元素(返回被刪除的元素的個數(shù)) 8.find()?查找一個元素 ???語法: iterator find( const key_type &key ); ???查找等于key值的元素,并返回指向該元素的迭代器; ???//如果沒有找到,返回指向集合最后一個元素的迭代器. 9.get_allocator()?返回map的配置器 10.insert()?插入元素 ???語法: ???iterator insert( iterator pos, const pair<KEY_TYPE,VALUE_TYPE> &val ); ???//插入valpos的后面,然后返回一個指向這個元素的迭代器 ???void insert( input_iterator start, input_iterator end ); ???//插入startend的元素到map ???pair<iterator, bool> insert( const pair<KEY_TYPE,VALUE_TYPE> &val ); ???//只有在val不存在時插入val。返回指向被插入元素的迭代器和描述是否插入的bool 11.key_comp()?返回比較元素key的函數(shù) ???語法: ???key_compare key_comp(); ???//返回一個用于元素間值比較的函數(shù)對象 12.lower_bound()?返回鍵值>=給定元素的第一個位置 ???語法: ???iterator lower_bound( const key_type &key ); ???//返回一個指向大于或者等于key值的第一個元素的迭代器 13.max_size()?返回可以容納的最大元素個數(shù) 14.rbegin()?返回一個指向map尾部的逆向迭代器 15.rend()?返回一個指向map頭部的逆向迭代器 16.size()?返回map中元素的個數(shù) 17.swap()?交換兩個map ???語法: ???void swap( map &obj ); ???//swap()交換obj和現(xiàn)map中的元素 18.upper_bound()?返回鍵值>給定元素的第一個位置 ???語法: ???iterator upwer_bound( const key_type &key ); ???//返回一個指向大于key值的第一個元素的迭代器 19.value_comp()?返回比較元素value的函數(shù) ???語法: ???value_compare value_comp(); //返回一個用于比較元素value的函數(shù)

MapSTL的一個關(guān)聯(lián)容器,它提供一對一(其中第一個可以稱為關(guān)鍵字,每個關(guān)鍵字只能在map中出現(xiàn)一次,第二個可能稱為該關(guān)鍵字的值)的數(shù)據(jù)處理能力,由于這個特性,map內(nèi)部的實現(xiàn)自建一顆紅黑樹(一種非嚴(yán)格意義上的平衡二叉樹),這顆樹具有對數(shù)據(jù)自動排序的功能。

下面舉例說明什么是一對一的數(shù)據(jù)映射。比如一個班級中,每個學(xué)生的學(xué)號跟他的姓名就存在著一一映射的關(guān)系,這個模型用map可能輕易描述,很明顯學(xué)號用int描述,姓名用字符串(string)描述。

下面給出map描述代碼:

1.聲明方式:?????

1???????Map<int,?string>?mapStudent;

2.數(shù)據(jù)的插入

第一種:用insert函數(shù)插入pair數(shù)據(jù)

1???????Map<int,?string>?mapStudent;?
2???????mapStudent.insert(pair<int,?string>(1,?“student_one”));?

??????第二種:用insert函數(shù)插入value_type數(shù)據(jù)

1???????Map<int,?string>?mapStudent;?
2???????mapStudent.insert(map<int,?string>::value_type?(1,?“student_one”));?

?????第三種:用數(shù)組方式插入數(shù)據(jù)

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

????3. map的大小

1?Int?nSize?=?mapStudent.size();?

????4.?數(shù)據(jù)的遍歷

第一種:應(yīng)用前向迭代器

1???????map<int,?string>::iterator?iter;?
2???????for(iter?=?mapStudent.begin();?iter?!=???mapStudent.end();?iter++)?
3???????Cout<<iter->first<<”?”<<iter->second<<end;?

?????第二種:應(yīng)用反相迭代器???

1???????map<int,?string>::reverse_iterator?iter;?
2???????for(iter?=?mapStudent.rbegin();?iter?!=?mapStudent.rend();?iter++)?
3???????Cout<<iter->first<<”?”<<iter->second<<end;

第三種:用數(shù)組方式?????

1???????int?nSize?=?mapStudent.size()?
2???????for(int?nIndex?=?1;?nIndex?<=?nSize;?nIndex++)?
3???????Cout<<mapStudent[nIndex]<<end;

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

第一種:用count函數(shù)來判定關(guān)鍵字是否出現(xiàn),但是無法定位數(shù)據(jù)出現(xiàn)位置

第二種:用find函數(shù)來定位數(shù)據(jù)出現(xiàn)位置它返回的一個迭代器,

當(dāng)數(shù)據(jù)出現(xiàn)時,它返回數(shù)據(jù)所在位置的迭代器,如果map中沒有要查找的數(shù)據(jù),它返回的迭代器等于end函數(shù)返回的迭代器

?1?int?main()?
?2?{?
?3???????Map<int,?string>?mapStudent;?
?4???????mapStudent.insert(pair<int,?string>(1,?“student_one”));?
?5???????mapStudent.insert(pair<int,?string>(2,?“student_two”));?
?6???????mapStudent.insert(pair<int,?string>(3,?“student_three”));?
?7???????map<int,?string>::iterator?iter;?
?8???????iter?=?mapStudent.find(1);?
?9???????if(iter?!=?mapStudent.end())?
10???????{?
11??????????Cout<<”Find,?the?value?is?”<<iter->second<<endl;?
12???????}?
13???????Else?
14???????{?
15??????????Cout<<”Do?not?Find”<<endl;?
16???????}?
17?}?

第三種:這個方法用來判定數(shù)據(jù)是否出現(xiàn)

Lower_bound函數(shù)用法,這個函數(shù)用來返回要查找關(guān)鍵字的下界(是一個迭代器)

Upper_bound函數(shù)用法,這個函數(shù)用來返回要查找關(guān)鍵字的上界(是一個迭代器)

例如:map中已經(jīng)插入了1234的話,如果lower_bound(2)的話,返回的2,而upper-bound2)的話,返回的就是3

Equal_range函數(shù)返回一個pairpair里面第一個變量是Lower_bound返回的迭代器,pair里面第二個迭代器是Upper_bound返回的迭代器,如果這兩個迭代器相等的話,則說明map中不出現(xiàn)這個關(guān)鍵字,程序說明

1?mapPair?=?mapStudent.equal_range(2);?
2?if(mapPair.first?==?mapPair.second)?
3?cout<<”Do?not?Find”<<endl;?

6.?數(shù)據(jù)的清空與判空

清空map中的數(shù)據(jù)可以用clear()函數(shù),判定map中是否有數(shù)據(jù)可以用empty()函數(shù),它返回true則說明是空map

7.?數(shù)據(jù)的刪除

這里要用到erase函數(shù),它有三個重載了的函數(shù)

迭代器刪除???

1????iter?=?mapStudent.find(1);?
2????mapStudent.erase(iter);

用關(guān)鍵字刪除??

1?Int?n?=?mapStudent.erase(1);//如果刪除了會返回1,否則返回0

用迭代器,成片的刪除

1?mapStudent.earse(mapStudent.begin(),??mapStudent.end());?
2?//成片刪除要注意的是,也是STL的特性,刪除區(qū)間是一個前閉后開的集合
3

總結(jié)

以上是生活随笔為你收集整理的C++ Maps MultiMaps的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。