c++stlのmap(テーマとまとめ)


前言:c++stl机能は非常に强力で、mapはその中の1つの机能の非常に强力な容器で、多くそれを磨いて(どうしてこの话を书いてとてもXを诘めます)、疫病はあまりにも深刻で、すべて外出する勇気がなくて、家で楽しく(tong)速く(ku)问题を涂るしかありません
一、map用法まとめ
1.visというmapコンテナ(int,int)タイプを定義する
map<int,int>vis;

2.itという名前の反復器(int,int)タイプを定義する反復器は、配列の下付き文字に似たものです
map<int,int>::iterator it;

vis.begin()は最初の反復器、visを返します.end()は最後の反復器の後のセットの遍歴方法を返す
for(it=vis.begin();it!=vis.end();it++)

3.iterという名前の反復器(int,int)タイプを定義する
map<int,int>::reverse_iterator iter;

vis.rbegin()は逆反復器の最初の(順反復器の最後の)visを返す.rend()は、逆反復器の最後の後の(順方向反復器の最初の前の)遍歴方法を返します.
for(iter=vis.rbegin();iter!=vis.rend();iter++)

4.map容器を空にして、これはqueueのようで、stackはすべてありません
vis.clear();

5.反復器で対応するキー(key)と値(value)のキー値のペアを返します.vis[key]=value
map<int,int>vis;
map<int,int>::iterator it;
it=vis.begin()
it->first;//   
it->second;//   

6.find関数:戻りキー(key)に対応する反復器
map<int,int>::iterator it;
it=find(key);

7.erase削除
vis.erase(it);//it            

vis.erase(key);//key         

8.size()これはすべてのコンテナがあるようで、mapにマッピングされた回数を返します
int cnt=vis.size();

9.2 D配列を定義するmap
map<ll,map<ll,int> >vis;

2 D配列をキーにすることができます
10.結合が構造体であるmap
#include 
using namespace std;
pair<int,int>p;
map<pair<string,int>,int >vis;
int x,y,n;
string s;
int main()
{
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>s>>y;
        vis[{s,y}]++;
    }
    map<pair<string,int>,int >::iterator it;
    for(it=vis.begin();it!=vis.end();it++)
    {
        printf("%s %d %d
"
,it->first.first.c_str(),it->first.second,it->second); } return 0; }

二、テーマのまとめ
CF4C Registration system
方法1:
mapを開いて、キーは文字列を保存して、値は文字列を保存して何番目の入力で、更に1つの配列を開きます
検索文字列はmapにありません.もし、文字列を保存してOKを出力します.いなければ位置対応配列の値+1となり、文字列と対応配列の値が出力される
#include 
using namespace std;
typedef unsigned long long ll;
map<string,int>m;
int co[100005];
int main()//
{
    int n;
    string str;
    cin>>n;
    map<string,int>::iterator it;
    for(int i=1;i<=n;i++)
    {
        cin>>str;
        it=m.find(str);//   str 
        if(it==m.end())//   
        {
            m[str]=i;//         
            cout<<"OK"<<endl;
        }
        else//     
        {
            int t=it->second;//t   str  ,     
            cout<<str<<++co[t]<<endl;
        }
    }
    return 0;
}


方法2:
キーメモリ文字列、値メモリ文字列出現回数、見つからない場合は直接出力OKを併存し、直接出力キー値ペアを見つけて値+1
#include 
using namespace std;
typedef unsigned long long ll;
map<string,int>m;
int co[100005];
int main()//
{
    int n;
    string str;
    cin>>n;
    map<string,int>::iterator it;
    for(int i=1;i<=n;i++)
    {
        cin>>str;
        it=m.find(str);//   str 
        if(it==m.end())//   
        {
            m[str]=1;//           
            cout<<"OK"<<endl;
        }
        else//     
        {
            cout<<str<<m[str]++<<endl;//   ——     ——           +1
        }
    }
    return 0;
}