浅整理一下STL(关联式容器)map、set

关系式容器:

map的简单用法

1.头文件<map>

2.map查找时间复杂度是O(log2 n)。用它实现键到值的映射较快,原因是它用平衡二叉搜索树来存储和访问的。map一对一映射,基于关键字的快速查找,不允许有重复值。

3.map<string,int>stu;//定义;string为关键字,int为值//关键字不能重复

 Stu[“tom”]=12;//赋值

4.例题:

题意:n个玩家给自己起游戏名

输入:n

         接下来n行是名字

输出:如若没重复输出“OK”,有重复则在名字后面+1、2、3...

#include<map>

int main()

{

    int n;

    cin>>n;

    map<string,int>mymap;

    string s;

    for(int i=0;i<n;i++)

    {

        cin>>s;

        if(mymap[s]==0)

        {

            cout<<"OK"<<endl;

        }

        else

        {

            cout<<s<<mymap[s]<<endl;

        }

        mymap[s]++;

    }

    return 0;

}

关于set简单用法:

1.头文件<set>

2.set适用于二叉搜索树的实现,集合中的每个元素只出现一次,而且是排序好的。访问元素的时间复杂度是O(long2 n)。

3.set的相关操作:

  set<type>A;//定义

  A.insert<i>;//将i放入set

  A.erase(i);//删除元素i

  A.clear();//清空set

  A.empty();//判断set是否为空,空返回true,否则返回false

  A.size();//返回元素个数

  A.find(k);//返回一个迭代器,指向键值k

  A.lower_bound(k);//返回一个迭代器,指向键值不小于k的第一个元素_ _k_

  A.upper_bound(k);// 返回一个迭代器,指向键值大于k的第一个元素_k_ _

3.例题:杭电OJ-- 2094 产生冠军

输入:                                 输出:

3                                           yes

Alice Bob

Smith John

Alice Smith

思路:被打败过的人一定不能当冠军!定义集合AB,把所有人放进集合A,再把有失败记录的人放进B,如果A-B=1,则能产生冠军,否者则不行。

代码:

int main()

{

       set<string>a,b;

       string s1,s2;

       int n;

       while(cin>>n&&n)

       {

              for(int i=0;i<n;i++)

              {

                     cin>>s1>>s2;

                     a.insert(s1);//a存所有的人

                     a.insert(s2);

                     b.insert(s2);//b存有失败记录的人

              }

              if(a.size()-b.size()==1) cout<<"Yes"<<endl;

              else cout<<"No"<<endl;

              a.clear();

              b.clear();

       }

    return 0;

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值