1. 程式人生 > >C++STL容器----map與multimap容器

C++STL容器----map與multimap容器

一、定義

Map是STL [1]  的一個關聯容器,它提供一對一(其中第一個可以稱為關鍵字,每個關鍵字只能在map中出現一次,第二個可能稱為該關鍵字的值)的資料處理能力,由於這個特性,它完成有可能在我們處理一對一資料的時候,在程式設計上提供快速通道

《百度百科》

簡單來說,對於陣列來說,索引就相當於鍵值,s[i]就相當於映照的資料.map中不允許重複的鍵值,multimap允許重複的鍵值

二、用法

由於map容器也是使用紅黑樹存取,所以它的用法與set一樣在這裡就直接寫出程式碼

三、map程式碼實現

#include<map>
#include<string>
#include<iostream>
using namespace std;
int main(int  argc,char *argv[])
 {
  map<int,char >m;//定義map容器,其中鍵值為int型,映照的資料為char 型
  m[25]='m';
  m[28]='k';
  m[30]='a';
    m.erase(28);//刪除鍵值為28的元素
   map<int,char>::iterator it;//定義迭代器
   for(it=m.begin();it!=m.end();it++)
   {
     cout<<(*it).first<<" :"<<(*it).second<<endl;//讀取鍵值和映照的資料
   }
   map<int,char>::reverse rit;
   for(rit=m.rbegin();rit!=m.rend();rit++)
   {
    cout<<(*rit).first<<" :"<<(*rit).second<<endl;
   }
}

實現結果

                           multimap

由於multimap可以插入重複的鍵值,所以插入,刪除,查詢都與map的用法不相同

四、multimap程式碼實現

 一、實現重複插入

#include<iostream>
#pragma warning(disable:4786)
#include<map>
#include<string>
using namespace std;
int main(int argc,char *argv[])
{   multimap<string,double> m;
   m.insert(pair<string,double>("jack",300.5));
   //向multimap插入資料
   m.insert(pair<string,double>("kity",200));
   m.insert(pair<string,double>("Memi",500));
   m.insert(pair<string,double>("jack",300.5));//插入重複的資料
    multimap<string,double>::iterator it;
    for(it=m.begin();it!=m.end();it++)
    {
      cout<<(*it).first<<" :"<<(*it).second<<endl;
    }
    m.erase("jack");
    cout<<"the elements after deleted :"<<endl;
 for(it=m.begin();it!=m.end();it++)
 {
       cout<<(*it).first<<" :"<<(*it).second<<endl;
 }
}

實現結果:

二、實現刪除

#include<iostream>
#include<string>
#include<map>
using namespace std;
int main(int argc,char *argv[])
{
  multimap<string,double>m;
  //插入相關的資料
  m.insert(pair<string,double>("jack",300.5) );
  m.insert(pair<string,double>("Tom",200));
  m.insert(pair<string,double>("jack",100.5) );
  m.insert(pair<string,double>("Memi",500));
  multimap<string,double>::iterator it;
  for(it=m.begin();it!=m.end();it++)
  {
    cout<<(*it).first<<" :"<<(*it).second<<endl;
  }
 cout<<"查詢的結果"<<endl;
 it=m.find("jack");
   if(it!=m.end())
   {
       cout<<(*it).first<<" :"<<(*it).second<<endl;
   }
    else
    {
       cout<<"抱歉沒找到"<<endl;
    }
    it=m.find("asda");
    if(it!=m.end())
    {
        cout<<(*it).first<<" :"<<(*it).second<<endl;
    }
    else
    {
     cout<<"抱歉沒找到"<<endl;
    }
   return 0;






}

實現結果: