map的使用心得

1.map的类型

map的头文件,#include<map>

map<int,int>;

map<string,int>;

map<int,string>

map<pair(int,int),int>

2,map的使用

map.count()检查key出现的次数,再map中key是唯一值,所以 返回值只有 0,或1

map.insert(make_pair()) 插入函数

map.size()得到map内key元素的个数

map.begin() map.end()首地址

map.clear()清楚map 容器


以下以例题使用为例

uva 1592 Database


AC  代码

#include<bits/stdc++.h>


using namespace std;
int a[10005][10];
map<pair<int,int>,int> data;
int main()
{
    int m,n;
    map<string ,int> in;
    while(~scanf("%d%d",&m,&n))
    {


       getchar();
        string str;


        int id=0;
        for(int i=0;i<m;i++)
        {
            getline(cin,str);
            string str1,temp;
            int len=0;
            int j;
            int col=0;
            for ( j=0;j<str.size();j++)
            {
                if (str[j]==',')
                {
                    str1=str.substr(len,j-len);
                    //cout <<str1<<endl;
                    len=j+1;
                    if (!in.count(str1))
                        in[str1]=id++;
                    a[i][col++]=in[str1];
                    //in.insert(make_pair(num,str1));
                    str1=temp;
                }


            }
            str1=str.substr(len,j-len);
            //cout <<str1<<endl;
            if (!in.count(str1))
                    in[str1]=id++;
            a[i][col++]=in[str1];
            str1=temp;


            //in.insert(make_pair(num,str1));


        }


        //cout <<it->first<<endl;
        bool flag =true;
            for (int i=0;i<n;i++)
            {
                //map<int,string>::iterator it2;
                for (int j=i+1;j<n;j++)
                {
                    for (int k=0;k<m;k++)
                    {
                        int ax=a[k][i];
                        int bx=a[k][j];
                        if (data.count(make_pair(ax,bx)))
                        {
                            printf("NO\n%d %d\n%d %d",data[make_pair(ax,bx)]+1,k+1,i+1,j+1);
                            flag = false;
                            break;


                        }
                        data[make_pair(ax,bx)]=k;
                    }
                    data.clear();
                    if (!flag)
                    {
                        break;
                    }
                }
                if(!flag) break;
            }
            if (flag) printf("YES\n");


            in.clear();
            data.clear();








    }


    return 0;






}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值