set获取元素_C++与STL入门(4):关联容器:集合set

回复set:获取csdn论坛对set集合关联容器的讲解

set使用前需要包含

set的详细用法在CSDN论坛中讲的相当清楚,这里再把常用到的子函数和特性进行展示。

set的两个特点:

①set内的元素是有序的。

②集合具有唯一性,集合内的元素都是唯一不重复的。

set的子函数:

begin()

返回指向第一个元素的迭代器

end()

返回指向最后一个元素的迭代器

clear()

清空集合

count()

返回某个值元素的个数

empty()

判断集合是否为空,为空返回true

equal_range()

返回集合中与给定值相等的上下限两个迭代器

erase()

删除集合中元素

find()

返回一个指向被查找到元素的迭代器

get_allocator()

返回集合的分配器

insert()

在集合中插入元素

lower_bound()

返回指向大于或等于某值的第一个元素的迭代器

key_comp()

返回一个用于元素间值比较的函数

max_size()

返回集合能容纳的元素的最大限值

rbegin()

返回指向集合中最后一个元素的反向迭代器

rend()

返回指向集合中第一个元素的反向迭代器

size()

集合中元素的数目

swap()

交换两个集合变量

upper_bound()

返回大于某个值元素的迭代器

value_comp()

返回一个用于比较元素间值的函数

具体用例展示:

展示迭代器、begin、end用法

展示定义时左闭右开

展示有序性质

#include #include using namespace std;int main(){    int myints[] = {6, 5, 4, 3, 2, 1};    set<int> myset(myints, myints + 6); //左闭右开    cout << "myset contains:";    for (set<int>::iterator it = myset.begin(); it != myset.end(); it++) //定义迭代器、使用begin、end函数        cout << ' ' << *it;                                              //对迭代器取内容可以直接获取内容    cout << '\n';    return 0;}

输出结果:

4901db82157c6ae14eef64cad5ead5cd.png

倘若我们将654321改为655321

则可以看出集合的唯一性:

d0f2f9f45ae3932b81ff3b0c70a4d43b.png

insert 、erase、size 函数使用:

#include #include using namespace std;int main(){    int myints[] = {6, 5, 5, 3, 2, 1};    set<int> myset(myints, myints + 6); //左闭右开    cout << "myset contains:";    for (set<int>::iterator it = myset.begin(); it != myset.end(); it++) //定义迭代器、使用begin、end函数        cout << ' ' << *it;                                              //对迭代器取内容可以直接获取内容    cout << '\n';    cout << myset.size() << '\n'; //集合中元素个数    myset.erase(5);    cout << "after erase '5' myset contains:";    for (set<int>::iterator it = myset.begin(); it != myset.end(); it++) //erase函数        cout << ' ' << *it;    cout << '\n';    myset.insert(5);    cout << "after insert '5' myset contains:";    for (set<int>::iterator it = myset.begin(); it != myset.end(); it++) //insert函数 插入后仍然具备有序性        cout << ' ' << *it;    cout << '\n';    return 0;}

结果:

74ea20c511ae0c76070d44d8e4c808c8.png

find 、lowerbound、upperbound函数的使用:

#include #include using namespace std;int main(){    int myints[] = {6, 5, 5, 3, 2, 1};    set<int> myset(myints, myints + 6); //左闭右开    cout << "myset contains:";    for (set<int>::iterator it = myset.begin(); it != myset.end(); it++) //定义迭代器、使用begin、end函数        cout << ' ' << *it;                                              //对迭代器取内容可以直接获取内容    cout << '\n';    set<int>::iterator it=myset.find(5);//操作后it指向5;    for (; it != myset.end(); it++)        cout << ' ' << *it;    it=myset.upper_bound(1);//it指向比1大第一个,即2    cout<<'\n';    for (; it != myset.end(); it++)        cout << ' ' << *it;    it=myset.lower_bound(1);//it指向1    cout<<'\n';    for (; it != myset.end(); it++)        cout << ' ' << *it;    return 0;    }

结果:

d5afe2ad6984b9957520f523a28fb0ac.png


例题:安迪的第一个字典

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

样例输入:

Good morning ! Good afernoon! Zhao tong xue !

分析:采用set和string string直接包含了小于运算,所以,录入集合后再输出就可以得到题目的结果。

#include #include #include #include using namespace std;set<string> dict; //定义一个string类型的集合int main(){    string s, buf;    while (cin >> s)    {        for (int i = 0; i < s.length(); i++) //string 子函数,判断字符串长度            if (isalpha(s[i]))                s[i] = tolower(s[i]); //isalpha用于判断是否为英文字母,tolower用于转换为小写字母            else                s[i] = ' '; //不是英文字母则转换为空格        stringstream ss(s); //将转换后的s重载入ss流        while (ss >> buf)            dict.insert(buf); //读取ss流已经保证全部为单词,并录入到集合    }    for (set<string>::iterator it = dict.begin(); it != dict.end(); it++)        cout << *it << '\n'; //输出集合    return 0;}

得到的结果:

38f3622dd55efb6c6e89576832d496ba.png

以上就是今天set用法的介绍。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值