1. 程式人生 > >c++ STL之map

c++ STL之map

而不是 一個 二叉 元素 type 刪除 其他 left 節點

map內部自建一顆紅黑樹(一 種非嚴格意義上的平衡二叉樹),這顆樹具有對數據自動排序的功能,所以在map內部所有的數據都是有序的,map中的元素是自動按Key升序排序,所以不能對map用sort函數;

map是一類關聯式容器。它的特點是增加和刪除節點對叠代器的影響很小,除了那個操作節點,對其他的節點都沒有什麽影響。

對於叠代器來說,可以修改實值,而不能修改key。

使用map得包含map類所在的頭文件

#include <map> //註意,STL頭文件沒有擴展名.h

插入數據:

  用insert函數插入pair數據

              

map<int
, string> mapStudent; mapStudent.insert(pair<int, string>(1, "student_one"));

  用insert函數插入value_type數據

map<int, string> mapStudent;  
  
    mapStudent.insert(map<int, string>::value_type (1, "student_one"));  

  用數組方式插入數據

map<int, string> mapStudent;  
  
    mapStudent[
1] = "student_one"; mapStudent[2] = "student_two"; mapStudent[3] = "student_three";

pair和value_type不覆蓋已有的key值對,數組覆蓋已有的key值對

第一種和第二種在效果上是完成一樣的,用insert函數插入數據,在數據的 插入上涉及到集合的唯一性這個概念,即當map中有這個關鍵字時,insert操作是插入數據不了的,但是用數組方式就不同了,它可以覆蓋以前該關鍵字對 應的值,

數據的遍歷

  應用前向叠代器

for(iter = mapStudent.begin(); iter != mapStudent.end(); iter++)  
  
       cout
<<iter->first<< <<iter->second<<endl;

  應用反相叠代器

for(iter = mapStudent.rbegin(); iter != mapStudent.rend(); iter++)  
  
        cout<<iter->first<<"  "<<iter->second<<endl; 

  用數組的形式

int nSize = mapStudent.size();  
  
//此處應註意,應該是 for(int nindex = 1; nindex <= nSize; nindex++)  
//而不是 for(int nindex = 0; nindex < nSize; nindex++)  
  
    for(int nindex = 1; nindex <= nSize; nindex++)  
  
        cout<<mapStudent[nindex]<<endl;  

兩個數據 iterator->first和 iterator->second分別代表關鍵字和存儲的數據。

查找並獲取map中的元素

  用count函數來判定關鍵字是否出現,其缺點是無法定位數據出現位置,由於map的特性,一對一的映射關系,就決定了count函數的返回值只有兩個,要麽是0,要麽是1,出現的情況,當然是返回1了

  用find函數來定位數據出現位置,傳入的參數是要查找的key,它返回的一個叠代器,當數據出現時,它返回數據所在位置的叠代器,如果map中沒有要查找的數據,它返回的叠代器等於end函數返回的叠代器。

map的基本操作函數:

C++ maps是一種關聯式容器,包含“關鍵字/值”對

begin() 返回指向map頭部的叠代器

clear() 刪除所有元素

count() 返回指定元素出現的次數

empty() 如果map為空則返回true

end() 返回指向map末尾的叠代器

equal_range() 返回特殊條目的叠代器對

erase() 刪除一個元素

find() 查找一個元素

get_allocator() 返回map的配置器

insert() 插入元素

key_comp() 返回比較元素key的函數

lower_bound() 返回鍵值>=給定元素的第一個位置

max_size() 返回可以容納的最大元素個數

rbegin() 返回一個指向map尾部的逆向叠代器

rend() 返回一個指向map頭部的逆向叠代器

size() 返回map中元素的個數

swap() 交換兩個map

upper_bound() 返回鍵值>給定元素的第一個位置

value_comp() 返回比較元素value的函數

      

參考文章:

https://www.cnblogs.com/fnlingnzb-learner/p/5833051.html

http://classfoo.com/ccby/article/WQ9qz

https://blog.csdn.net/zhimeng567/article/details/78546199

c++ STL之map