C++ STL set容器及相关函数简介
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C++ STL set容器及相关函数简介,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2327字,纯文字阅读大概需要4分钟。
内容图文
STL set是关联容器,可反转,可排序,且键是唯一的,因此不能存储多个相同的值,set使用模板参数指定要存储的值类型
假设声明一个int类型的set,声明如下:
set<int> a;
模板第二个参数为可选参数,默认为less<Type>,
一般情况下set<int> a 即为set<int,lass<int>> a,但是需要注意,一些旧版本的C++可能没有提供默认参数,因此需要前述的显式指定
构造函数:
如同其他容器,set提供了一个将迭代器区间作为参数的构造函数,这提供了将集合初始化为数组以及其他内容的简单方法。
例如:
int k[10] = { 0,1,2,3,4,5,6 };
set<int> a(k, k + 6);
集合a的内容将为{ 0,1,2,3,4,5,6 };
数学为集合定义的标准操作,并集、交集、两个集合的差是第一个集合减去两个集合都有的元素即交集:
STL提供了支持这些操作的算法,它们是通用函数,而不是成员函数,因此并非只适用于set对象,所有的set对象都自动满足这些算法的先决条件,即容器都是经过排序的,算法有如下:
set_union(),其接受五个迭代器参数,前两个指定第一个集合的的区间,接下来两个指定第二个集合的区间,最后一个指定输出迭代器,可以使用输出迭代器将内容输出都屏幕:
例如:
int k[10] = { 0,1,2,3,4,5,6,7,8,9 };
set<int> a(k, k + 6),
b(k + 6, k + 10);
set_union(a.begin(), a.end(), b.begin(), b.end(), ostream_iterator<int, char>(cout, " "));
上述代码控制台将输出:0 1 2 3 4 5 6 7 8 9
set_in
set_intersection(),查找两个集合的并集,该函数的接口和set_union相同,
例如:
int k[10] = { 0,1,2,3,4,5,6,7,8,9 };
set<int> a(k, k + 6),
b(k + 5, k + 10);
set_intersection(a.begin(), a.end(), b.begin(), b.end(), ostream_iterator<int, char>(cout, " "));
上述代码执行将输出:5
set_intersection(),给出两个集合的差,接口和set_union一致。
int k[10] = { 0,1,2,3,4,5,6,7,8,9 };
set<int> a(k, k + 6),
b(k + 5, k + 10);
set_difference(a.begin(), a.end(), b.begin(), b.end(), ostream_iterator<int, char>(cout, " "));
上述代码将输出:0 1 2 3 4
另外两个比较有用的函数是lower_bound()和upper_bound(),其有三个参数,前两个指定区间,最有一个指定键,lower_bound()返回一个指向区间内第一个不大于键的成员的迭代器,upper_bound()则返回一个指向区间内第一个大于键的成员的迭代器,利用其性质,能找到这样一个区间,在字符的set中,包含c-f的的区间
例如:
string s{ "abcdefgh" };
set<char> a;
a.insert(s.begin(), s.end());
cout << *lower_bound(a.begin(), a.end(), 'f') << endl;
cout << *upper_bound(a.begin(), a.end(), 'f') << endl;
上述代码将输出:
f
g
内容总结
以上是互联网集市为您收集整理的C++ STL set容器及相关函数简介全部内容,希望文章能够帮你解决C++ STL set容器及相关函数简介所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。