NO IMAGE
  • map基本概念
    • 什麼是map?
      map是一種關聯型容器。map中的元素是按照key-value的方式儲存的。也就是說一個map元素包含兩個值。且map排序的規則是按key的大小來排序的。
    • map的功能&特點
      • 輸入無序,輸出按key排序。
      • 不能通過iterator去修改map中元素的值,因為這樣會破壞排序規則。
      • multimap和map的區別在於:multimap允許出現重複key值。
    • map的實現原理
      map跟set容器一樣,底層都是用RB-tree實現的。
  • map常用API

    • 初始化

      map<int,int> m1;
      map<int,int> m2(m1);
      map<int,int> m3=m2;
    • 賦值

      map<int,int> m1;
      m1.insert(make_pair(1,2));
      map<int,int> m2;
      m2=m1;
      m2[2]=9;//陣列法
      cout<<m2.at(2)<<endl;//at方法
      map<int,int>::iterator i=m2.begin();
      while(i!=m2.end()){
      cout<<"the first element is:"<<i->first<<"the second element is:"<<i->second<<endl;
      i  ;
      }
      cout<<endl;
      
    • 元素訪問
      使用迭代器
      陣列法
      at方法
    • 大小

      //size()
      //empty()
    • 插入刪除
      插入:

      //insert(pair<T,T>(ele,ele))
      //insert(make_pair(ele,ele))
      //insert(map<T,T>::value_type(ele,ele))
      #include <iostream>
      #include <map>
      #include <algorithm>
      using namespace std;
      int main(){
      map<int, int> m1;
      m1.insert(make_pair(1, 2));
      m1.insert(pair<int,int>(3,4));
      m1.insert(map<int, int>::value_type(5, 6));
      map<int, int>::iterator i = m1.begin();
      while (i != m1.end()){
      cout << "the first element is: " << i->first << " the second element is: " << i->second << endl;
      i  ;
      }
      return 0;
      }

      刪除:

      //erase(iter_pos)
      //erase(iter_start,iter_end)
      //erase(ele)
      //clear()
      #include <iostream>
      #include <map>
      #include <algorithm>
      using namespace std;
      void printmap(map<int, int> &m1){
      map<int, int>::iterator i = m1.begin();
      while (i != m1.end()){
      cout << "the first element is: " << i->first << " the second element is: " << i->second << endl;
      i  ;
      }
      }
      int main(){
      map<int, int> m1;
      m1.insert(make_pair(1, 2));
      m1.insert(pair<int,int>(3,4));
      m1.insert(map<int, int>::value_type(5, 6));
      m1.insert(make_pair(10, 20));
      m1.insert(pair<int, int>(30, 40));
      m1.insert(map<int, int>::value_type(40, 50));
      printmap(m1);
      cout << "------------------" << endl;
      m1.erase(m1.begin());
      printmap(m1);
      cout << "------------------" << endl;
      m1.erase(10);
      printmap(m1);
      m1.erase(m1.begin(), m1.end());//相當於clear()
      cout << m1.size() << endl;
      return 0;
      }
    • 查詢

      //find    iter or .end()
      //lower_bound   >=
      //upper_bound   >
      //equal_range   pairii

  • multimap案例