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就是常用之一,记住即可!

posted @ 2012-08-13 10:21  煮人为乐  阅读(214)  评论(0编辑  收藏  举报