HDOJ_2094 寻找冠军 set的简单应用

这个题原来没有思路,感觉较难,想着得建树,后来在讨论区看到神贴,用set水过,看了一下,才想到方法,其实这个不用set的巧妙之处是 运用了set 相同的元素只存储一个的特性,建立两个容器,好啦,大家一看代码便知思路,我暴怒废话啦

#include<iostream>

#include<set>

#include<string>

#include<algorithm> //这个不能少,用到比较时旧的添上

using namespace std;

int main()

{

    int n;

    string str1,str2;

    set<string>a,b;

    while(scanf("%d",&n),n)

    {

        while(n--)

        {

            cin>>str1>>str2;

            a.insert(str1);

            b.insert(str2);

        }

        set<string>::iterator i;

        for(i=b.begin();i!=b.end();i++)

        {

            if(find(a.begin(),a.end(),*i)!=a.end())

                a.erase(*find(a.begin(),a.end(),*i));

        }

        if(a.size()==1)

            cout<<"Yes"<<endl;

        else

            cout<<"No"<<endl;

        a.clear();

        b.clear();

    }

    return 0;

}

        


set的一下简单操作:

begin() 返回指向第一个元素的迭代器

  clear() 清除所有元素

  count() 返回某个值元素的个数

  empty() 如果集合为空,返回true(真)

  end() 返回指向最后一个元素之后的迭代器,不是最后一个元素

      equal_range() 返回集合中与给定值相等的上下限的两个 迭代器

  erase() 删除集合中的元素

  find() 返回一个指向被查找到元素的迭代器

  get_allocator() 返回集合的分配器

  insert() 在集合中插入元素

  lower_bound() 返回指向大于(或等于)某值的第一个元素的迭代器

  key_comp() 返回一个用于元素间值比较的函数

  max_size() 返回集合能容纳的元素的最大限值

  rbegin() 返回指向集合中最后一个元素的反向迭代器

  rend() 返回指向集合中第一个元素的反向迭代器

  size() 集合中元素的数目

    swap() 交换两个集合变量
     upper_bound() 返回大于某个值元素的迭代器

  value_comp() 返回一个用于比较元素间的值的函数

 

 

StL用多了,大家也知道,其实常用的操作没几个,想本题里面的find就是常用之一,记住即可!

你可能感兴趣的:(set)