for(;iter!=mapstudent.end();)
else
}這種刪除方式也是stl原始碼一書中推薦的方式,分析 mapstudent.erase(iter++)語句,map中在刪除iter的時候,先將iter做快取,然後執行iter++使之指向下乙個結點,再進入erase函式體中執行刪除操作,刪除時使用的iter就是快取下來的iter(也就是當前iter(做了加操作之後的iter)所指向結點的上乙個結點)。
根據以上分析,可以看出mapstudent.erase(iter++)和map student.erase(iter); iter++;這個執行序列是不相同的。前者在erase執行前進行了加操作,在iter被刪除(失效)前進行了加操作,是安全的;後者是在erase執行後才進行加操作,而此時iter已經被刪除(當前的迭代器已經失效了),對乙個已經失效的迭代器進行加操作,行為是不可預期的,這種寫法勢必會導致 map操作的失敗並引起程序的異常。
資料的遍歷
這裡也提供三種方法,對map進行遍歷
第一種:應用前向迭代器,上面舉例程式中到處都是了,略過不表
第二種:應用反相迭代器,下面舉例說明,要體會效果,請自個動手執行程式
#include
#include
#include
using namespace std;
int main()
}第三種:用陣列方式,程式說明如下
#include
#include
#include
using namespace std;
int main()
}5. 資料的查詢(包括判定這個關鍵字是否在map中出現)
在這裡我們將體會,map在資料插入時保證有序的好處。
要判定乙個資料(關鍵字)是否在map中出現的方法比較多,這裡標題雖然是資料的查詢,在這裡將穿插著大量的map基本用法。
這裡給出三種資料查詢方法
第一種:用count函式來判定關鍵字是否出現,其缺點是無法定位資料出現位置,由於map的特性,一對一的對映關係,就決定了count函式的返回值只有兩個,要麼是0,要麼是1,出現的情況,當然是返回1了
第二種:用find函式來定位資料出現位置,它返回的乙個迭代器,當資料出現時,它返回資料所在位置的迭代器,如果map中沒有要查詢的資料,它返回的迭代器等於end函式返回的迭代器,程式說明
#include
#include
#include
using namespace std;
int main()
else
}第三種:這個方法用來判定資料是否出現,是顯得笨了點,但是,我打算在這裡講解
lower_bound函式用法,這個函式用來返回要查詢關鍵字的下界(是乙個迭代器)
upper_bound函式用法,這個函式用來返回要查詢關鍵字的上界(是乙個迭代器)
例如:map中已經插入了1,2,3,4的話,如果lower_bound(2)的話,返回的2,而upper-bound(2)的話,返回的就是3
equal_range函式返回乙個pair,pair裡面第乙個變數是lower_bound返回的迭代器,pair裡面第二個迭代器是upper_bound返回的迭代器,如果這兩個迭代器相等的話,則說明map中不出現這個關鍵字,程式說明
#include
#include
#include
using namespace std;
int main()
iter = mapstudent.lower_bound(3);
iter = mapstudent.upper_bound(2);
iter = mapstudent.upper_bound(3);
cout<<」do not find」<}
else
else
6. 資料的清空與判空
清空map中的資料可以用clear()函式,判定map中是否有資料可以用empty()函式,它返回true則說明是空map
7. 資料的刪除
這裡要用到erase函式,它有三個過載了的函式,下面在例子中詳細說明它們的用法
#include
#include
#include
using namespace std;
int main()
stl map高效遍歷刪除的方法
for iter mapstudent.end else 這種刪除方式也是stl原始碼一書中推薦的方式,分析 mapstudent.erase iter 語句,map中在刪除iter的時候,先將iter做快取,然後執行iter 使之指向下乙個結點,再進入erase函式體中執行刪除操作,刪除時使用的i...
STL map的使用方法
一map內部資料的組織 map內部自建一顆紅黑樹 一種非嚴格意義上的平衡二叉樹 這顆樹具有對資料自動排序的功能,所以在map內部所有的資料都是有序的,後邊我們會見識到有序的好處。二 map的建構函式 map共提供了6個建構函式,這塊涉及到記憶體分配器這些東西,略過不表,在下面我們將接觸到一些map的...
STL map的使用方法
方法一 使用insert進行插入 方法二 直接插入 逆序遍歷 map int,string reverse iterator it 逆序遍歷 for it m.rbegin iter m.rend it 順序遍歷 map int,string iterator it 方法一 用find函式 方法二 ...