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基本操作:
第二種:用insert函數(shù)插入value_type數(shù)據(jù)
數(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(){
第三種:這個方法用來判定數(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)
第一種:應用前向迭代器
清空map中的數(shù)據(jù)可以用clear()函數(shù),判定map中是否有數(shù)據(jù)可以用empty()函數(shù),它返回true則說明是空map7.
新聞熱點
疑難解答