>3)mapコンテナの特徴です.(1)キーワードに基づいてデータの読み取り能力を向上させる関連コンテナです.(2)データを読み書きするための双方向のロケータを提供する.(3)キーワードと比較関数に基づいて順序を並べた.(4)各要素のキーワードは唯一である.(5)は、一般的で独立したデータ型を提供するテンプレートです.
4)mapに関する最も詳しい紹介は資源を参照
STL MAP詳細リソースダウンロード
5)map法と組み合わせて、総合的なテストコードを提供した.#include <cstdlib>
#include <map>
#include <iostream>
using namespace std;
map <int,char> ctr;
int print_one_item(map <int,char>::const_iterator cp)// map
{
cout<<"("<<cp->first<<" , "<<cp->second<<") ";
return 0;
}
void test_equal_range()// equal_range()
{
//pair
//pair 。
pair <map <int,char>::const_iterator, map <int,char>::const_iterator> p;
p=ctr.equal_range(2);
if(p.first!=ctr.end())
{
cout<<"The first element which key >= 2 is: ";
//cout<<"("<<p.first->first<<" , "<<p.first->second<<") ";
print_one_item(p.first); //
cout<<endl;
}
if(p.second!=ctr.end())
{
cout<<"The first element which key > 2 is: ";
cout<<"("<<p.second->first<<" , "<<p.second->second<<") ";
cout<<endl;
}
}
void creat_map()
{
ctr.insert(pair <int,char>(1,'a'));
ctr.insert(pair <int,char>(2,'b'));
ctr.insert(pair <int,char>(3,'b'));
ctr.insert(pair <int,char>(4,'c'));
ctr.insert(pair <int,char>(5,'d'));
ctr.insert(pair <int,char>(1,'c'));
}
void erase_map()//
{
map <int,char>::iterator cp=ctr.find(2);
ctr.erase(cp);// 2
}
void clear_map()
{
ctr.clear();// map ( )
if(ctr.empty())//map
cout<<"The container is empty"<<endl;
else
cout<<"The container is not empty"<<endl;
}
int print()// map
{
map<int,char>::const_iterator cp;
for(cp=ctr.begin();cp!=ctr.end();cp++)// cp c cp
print_one_item(cp); //
return 0;
}
void print_first_element()
{
map <int,char>::iterator cp;//
cp=ctr.begin(); // ctr
cout<<"The first element is:"<<cp->second<<endl;//
}
void key_compare_map() //key_comp map 。
{
map <int,int> c;
map <int, int, less<int> >::key_compare kc = c.key_comp() ;
if(kc( 1, 2 ))
cout<<"kc(1,2) is true"<<endl;
else
cout<<"kc(1,2) is false"<<endl;
if(kc( 2, 1 ))
cout<<"kc(2,1) is true"<<endl;
else
cout<<"kc(2,1) is false"<<endl;
}
void lower_bound_map()
{
map <int,char>::iterator cp;
/* , map
*/
cp=ctr.lower_bound(2);// 2
if(cp!=ctr.end())
{
cout<<"The first element which key >= 2 is: ";
print_one_item(cp);//
cout<<endl;
}
}
void compare_map()
{
map <int,char> ctr1,ctr2;
int i;
for(i=0;i<3;i++)
{
ctr1.insert(pair <int,char>(i,'a'+i));
ctr2.insert(pair <int,char>(i,'A'+i));
}
if(ctr1!=ctr2)// ctr1 ct2
cout<<"They are not equal"<<endl;
else// ctr1 ctr2
cout<<"They are equal"<<endl;
}
void comp_map()// map 。
{ // map ,
map <int,char> ctr1,ctr2;
int i;
for(i=0;i<3;i++)// ctr1 ctr2
{
ctr1.insert(pair <int,char>(i,i));
ctr2.insert(pair <int,char>(i,i+1));
}
if(ctr1<ctr2)
cout<<"ctr1<ctr2"<<endl;
else
cout<<"ctr1>=ctr2"<<endl;
}
void reverse_map()// map rbegin() rend() reverse_iterator
{
map <int,char>::reverse_iterator rcp;
for(rcp=ctr.rbegin();rcp!=ctr.rend();rcp++)
cout<<"("<<rcp->first<<" , "<<rcp->second<<") ";
}
void swap_map()
{
map <int,int> ctr1, ctr2;
map <int,int>::const_iterator cp;
int i;
for(i=0;i<3;i++)// ctr1 ctr2
{
ctr1.insert(pair <int,int>(i,i));
ctr2.insert(pair <int,int>(i,i+10));
}
cout<<"Before exchange with ctr2 the ctr1 is:";
for(cp=ctr1.begin();cp!=ctr1.end();cp++)// cp c cp
cout<<"("<<cp->first<<" , "<<cp->second<<") ";
cout<<endl;
cout<<"After exchange with ctr2 the ctr1 is:";
ctr1.swap(ctr2);// ctr1 ctr2
for(cp=ctr1.begin();cp!=ctr1.end();cp++)// cp c cp
cout<<"("<<cp->first<<" , "<<cp->second<<") ";
cout<<endl;
}
int main()
{
creat_map();
int i;
cout<<"1, begin()"<<endl;
cout<<"2, count() "<<endl;
cout<<"3, test_equal_range()"<<endl;
cout<<"4, erase()"<<endl;
cout<<"5, key_compare_map()"<<endl;
cout<<"6, lower_bound_map()"<<endl;
cout<<"7, map size max_size( )"<<endl;
cout<<"8, [] "<<endl;
cout<<"9, != "<<endl;
cout<<"10, < "<<endl;
cout<<"11, map"<<endl;
cout<<"12, map "<<endl;
while(1)
{
cin>>i;
switch(i)
{
case 1: print_first_element(); break;
case 2: int j;
j=ctr.count(1);// 1 ( map , 0 1)
cout<<"The number of key 1 is: "<<j<<endl;break;
case 3: test_equal_range(); break;
case 4: erase_map();break;
case 5: key_compare_map();break;
case 6: lower_bound_map();break;
case 7: cout<<"the size of ctr is:"<<ctr.size()<<endl;
cout<<"the max_size of ctr is:"<<ctr.max_size()<<endl;break;
case 8: cout<<"before change map is:"<<endl;
print();
ctr[1]='W';// 1 W
ctr[7]; // 7 0
cout<<"
after change map is:"<<endl;
print();break;
case 9:compare_map();break;
case 10:comp_map();break;
case 11:reverse_map();break;
case 12:swap_map(); break;
}
}
map <int,char>::iterator end;//
end=ctr.end(); // Map ,
//end--;// d c
cout<<"The last element is:"<<end->second<<endl;
clear_map();
return 0;
}
もう1つのmapデータ構造の応用(文字列ごとに現れる個数を統計する)を見てみましょう.#include <iostream>
#include <map>
using namespace std;
int main()
{
map <string ,int> M;
map <string ,int>::iterator j;
string t[5]={"abc","dd","abc","dd","dd"};
for(int i=0;i<5;++i)
M[t[i]]++;//
for(j=M.begin();j!=M.end();++j)
cout<<"<"<<j->first<<" ,"<<j->second<<">"<<endl;
return 0;
}