zoukankan      html  css  js  c++  java
  • Ananagrams(反片语)【map的应用】P114

    中文题意:输入一些单词,找出满足如下条件的单词:该单词不能通过字母重排,得到文本中的另一个单词。
    在判断是否满足条件时,字母不分大小写,
    但在输出是应保留输入中的大小写,按字典序进行排序(所有大写字母在所有小写字母的前面)。
    ladder came tape soon leader acme RIDE lone Dreis peat ScAlE orb eye Rides dealer NotE derail LaCeS drIed noel dire Disk mace Rob dries #
    #include<bits/stdc++.h>
    using namespace std;
    
    map<string,int>cnt;
    vector<string>words;
    
    //将单词s进行“标准化”
    string repr(const string &s)
    {
        string ans=s;
        for(int i=0;i<ans.length();i++)
        {
            ans[i]=towlower(ans[i]);//把所有字母变为小写字母,方便统计
        }
        sort(ans.begin(),ans.end());
        return ans;
    }
    
    int main()
    {
        int n=0;
        string s;
        while(cin>>s)
        {
            if(s[0]=='#')break;
            words.push_back(s);
            string r=repr(s);
            if(!cnt.count(r))//假如没有找到
            {
                cnt[r]=0;
            }
            cnt[r]++;
        }
        vector<string>ans;
        for(int i=0;i<words.size();i++)
        {
            if(cnt[repr(words[i])]==1)//找出唯一的单词
            {
                ans.push_back(words[i]);
            }
        }
        sort(ans.begin(),ans.end());
        for(int i=0;i<ans.size();i++)
        {
            cout<<ans[i]<<endl;
        }
        return 0;
    }

    map和set两种容器的底层结构都是红黑树,所以容器中不会出现相同的元素,因此count()的结果只能为0和1可以以此来判断键值元素是否存在(当然也可以使用find()方法判断键值是否存在)。

    拿map<key,value>举例,find()方法返回值是一个迭代器,成功返回迭代器指向要查找的元素,失败返回的迭代器指向end。count()方法返回值是一个整数,1表示有这个元素,0表示没有这个元素。

  • 相关阅读:
    UOJ#424. 【集训队作业2018】count
    框架的 总结(nop)------添加功能
    c# 调用分页(控制器端的)与时间的格式
    c# 通过关键字查询
    c#导入导出 插入数据到用户表(nop框)
    Nop权限的使用
    联合结果集的原则
    简单的结果集联合
    UNION ALL
    联合结果集
  • 原文地址:https://www.cnblogs.com/laoyangtou/p/8641389.html
Copyright © 2011-2022 走看看