1. 程式人生 > >關於STL的map的注意事項

關於STL的map的注意事項

關於map是什麼,這裡就不多敘述了。

直接正題,常用的map插入操作有三種方法:通過pair<key_type,value_type>、通過value_type插入資料、還有一種類似於陣列的形式插入資料,關鍵字就是陣列下標。

 

關於三種插入方式的區別:前兩者的效果是一樣的,但是由於資料集合唯一性,如果一個key對應的value上有值的話,那麼再次往這個key上插入一個新的value會失敗,

可以使用pair模板型別進行測試。

 

由於map是有序的,所以查詢的話可以直接使用key進行查詢,比如說find(key)就可以查到key對應的value了,find函式如果查到就返回對應的迭代器的位置,若沒找到就是返回end()函式的位置。

使用迭代器獲取map中的資料,其資料型別是一個std::pair物件,包括first成員和second成員,對應的是key和value。

lower_bound():用於返回key關鍵字在map中的下界;

upper_bound():用於返回key關鍵字在map中的上界;

理解:若找到key,那麼兩個函式都是返回他們的對應的迭代器,若沒找到,那麼lower_bound函式返回距離查詢的key最近的下界的那個key對應的迭代器,upper_bound與此相反。

Equal_range():返回一個std::pair物件,它有三個引數,前兩個是指定序列的正向迭代器,最後一個引數是要查詢的元素,其first指向的是不小於第三個引數的一個元素,second指向的是不大於第三個引數的一個元素。

可以理解為:在第一個迭代器與第二個迭代器之間找第三個元素的值。

 

移除map中的某個條目使用erase(),它有一個函式形式如下

size_type erase(const Key&key);//通過關鍵字刪除

若使用clear()函式刪除,那麼相當於erase函式的另一個形式的使用:erase(map.begin(),map.end());//範圍刪除

 

map的swap函式,不是一個容器中的元素交換,而是兩個容器所有元素的交換。

STL中的排序預設是使用小於號排序的,map本身是有序的,按照key從小到大進行排序,如果key是結構體的話,這時候的排序問題,可以通過兩種方式解決,一種是過載小於號,另一種可以使用仿函式。