zoukankan      html  css  js  c++  java
  • stl的集合set——安迪的第一个字典(摘)

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

    以下代码测试set中无重复元素

    #include<iostream>
    #include<iterator>
    #include<set>
    using namespace std;
    typedef long long LL;
    const int coeff[3]={2,3,5};
    int main() 
    {
        set<LL>s;
        s.insert(1);
        s.insert(22);
        s.insert(1);
        set<LL>::iterator iter;
        for(iter=s.begin();iter!=s.end();iter++){
            cout<<*iter<<endl;
        }
        //system("pause");
        return 0;
    }

    (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()把字符转换成小写字母,非字母字符不做出处理

  • 相关阅读:
    第3章 敏捷项目管理概述
    第2章 传统与敏捷方法论
    第1章 敏捷思维—“互联网+”知识工作者必备的DNA
    敏捷项目管理架构(APMF)
    敏捷宣言和准则
    研发工程师如何转型项目经理
    软件门外汉的入门进阶
    [摘录]第五部分 经验谈(2)
    [摘录]第五部分 经验谈(1)
    [摘录]第四部分 教训篇(2)
  • 原文地址:https://www.cnblogs.com/farewell-farewell/p/5231684.html
Copyright © 2011-2022 走看看