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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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()把字符转换成小写字母,非字母字符不做出处理

 

以上是关于stl的集合set——安迪的第一个字典(摘)的主要内容,如果未能解决你的问题,请参考以下文章

安迪的第一个字典 (Andy's First Dictionary,UVa10815)

C - 安迪的第一本字典

安迪的第一个字典 Andy's First Dictionary, UVa 10815

STL——set

STL源代码剖析——STL算法之set集合算法

结构体嵌入字典或者集合