stl的集合set——安迪的第一个字典(摘)

set就是数学上的集合——每个元素最多只出现一次,和sort一样,自定义类型也可以构造set,但同样必须定义“小于”运算符

(ps:multiset是允许有重复数据的集合)

set不支持随机访问,必须要使用迭代器去访问。

begin() 返回指向第一个元素的迭代器
clear() 清除所有元素
count() 返回某个值元素的个数
empty() 如果集合为空,返回true(真)
end() 返回指向最后一个元素之后的迭代器,不是最后一个元素
erase() 删除集合中的元素
find() 返回一个指向被查找到元素的迭代器
insert() 在集合中插入元素
max_size() 返回集合能容纳的元素的最大限值
size() 集合中元素的数目
swap() 交换两个集合变量

例题

输入一个文本,找出所有不同的单词(连续的字母序列),按字典序从小到大输出,单词不区分大小写

样例

代码

#include<iostream>
#include<string>
#include<set>
#include<sstream>
using namespace std;
set<string>dict;         //集合
int main()
{
    string s,buf;
    while(cin>>s){
        for(int i=0;i<s.length();i++)
            if(isalpha(s[i]))s[i]=tolower(s[i]);
            else s[i]=‘ ‘;
            stringstream ss(s);               //创建存储s的副本的 stringstream 对象ss
            while(ss>>buf)dict.insert(buf);      //将转换后的小写单词存入集合中
    }
    for(set<string>::iterator it=dict.begin();it!=dict.end();++it)cout<<*it<<endl;
    //system("pause");
    return 0;
}

isalpha()判断字符ch是否为英文字母,若为小写字母,返回2,若为大写字母,返回1。若不是字母,返回0。

tolower()把字符转换成小写字母,非字母字符不做出处理

时间: 2024-10-21 09:39:46

stl的集合set——安迪的第一个字典(摘)的相关文章

安迪的第一个字典 Andy&#39;s First Dictionary, UVa 10815

(Time limit: 3 seconds) Andy, 8, has a dream - he wants to produce hisvery own dictionary. This is not an easy task forhim, as the number of words that he knows is,well, not quite enough. Instead of thinking up allthe words himself, he has a briliant

安迪的第一个字典 (Andy&#39;s First Dictionary,UVa10815)

题目描述: #include<iostream> #include<string> #include<set> #include<sstream> using namespace std; set<string> dic; string s, buf; int main() { while(cin >> s) { for(int i = 0; i < s.length(); i++) if(isalpha(s[i])) s[i]

uva10815安迪的第一个字典

背景:这种题,我只能说,原谅我是新手,一点不会,于是又只有照着书上打出来. 学习:c++里面set的一些基本用法.还有isalpha()函数和tolower()函数,isalpha()函数相当于isupper()||islower()的作用,为判断一个字符是否为英文字符,tolower()为将一个字符转变成小写字符,与之相反的为tosupper()函数.代码中的set<string>::iterator中的iterator是迭代器的意思,是STL中的重要概炼,类似于指针. 注:set和stri

UVa 10815 安迪的第一个字典

https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1756 题意:很简单,把输入的文本,排序按字典序输出,相当于制作字典. 主要是set和stringstream的运用. 对于stringstream有个简单的程序. #include<iostream> #include<sstream> using namespac

单词数 (STL set集合)

单词数 Problem Description lily的好朋友xiaoou333最近很空,他想了一件没有什么意义的事情,就是统计一篇文章里不同单词的总数.下面你的任务是帮助xiaoou333解决这个问题. Input 有多组数据,每组一行,每组就是一篇小文章.每篇小文章都是由小写字母和空格组成,没有标点符号,遇到#时表示输入结束. Output 每组只输出一个整数,其单独成行,该整数代表一篇文章里不同单词的总数. Sample Input you are my friend # Sample

STL 之map解决 Message Flood(原字典树问题)

Message Flood Time Limit:1500MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu Description Well, how do you feel about mobile phone? Your answer would probably be something like that "It's so convenient and benefits people a lot".

我的第一个字典-Dictionary

我的OC学习阶段中 我的第一个字典创建 /* NSDictionary *dic = [NSDictionary dictionaryWithObject:@"xiaochen" forKey:@"name"] ; NSLog(@"%@", dic); */ 虽然说我不是专业学习软件编程的,但是我很喜欢编程.真不知道自己填写志愿的时候为什么会选择通信, 大学上的有点伤心了, 没有姿色 也没有肉, 一点也不性感. 我要努力学习编程, 成为我想做的那

stl set 集合的操作,,转载

STL set B 添加义项 ? STL 对这个序列可以进行查找,插入删除序列中的任意一个元素,而完成这些操作的时间同这个序列中元素个数的对数成比例关系,并且当游标指向一个已删除的元素时,删除操作无效.而一个经过更正的和更加实际的定义应该是:一个集合(set)是一个容器,它其中所包含的元素的值是唯一的.这在收集一个数据的具体值的时候是有用的.集合中的元素按一定的顺序排列,并被作为集合中的实例.一个集合通过一个链表来组织,在插入操作和删除操作上比向量(vector)快,但查找或添加末尾的元素时会有

(转)C++ STL set() 集合

set是STL中一种标准关联容器(vector,list,string,deque都是序列容器,而set,multiset,map,multimap是标准关联容器),它底层使用平衡的搜索树——红黑树实现,插入删除操作时仅仅需要指针操作节点即可完成,不涉及到内存移动和拷贝,所以效率比较高.set,顾名思义是“集合”的意思,在set中元素都是唯一的,而且默认情况下会对元素自动进行升序排列,支持集合的交(set_intersection),差(set_difference) 并(set_union),