set学习之创建,初始化,赋值操作operator=, empty,size
set
是关联容器,含有 Key
类型对象的已排序集。用比较函数 比较 (Compare) 进行排序。搜索、移除和插入拥有对数复杂度。 set
通常以红黑树实现。本篇学习set的创建及初始化。
示例代码:
#include <iostream>
#include <set>
#include <string>
#include <functional>
#include <cmath>using namespace std;bool fncomp_greater (int lhs, int rhs) {return lhs > rhs;}bool fncomp_less (int lhs, int rhs) {return lhs < rhs;}struct classcomp_less {bool operator() (const int& lhs, const int& rhs) const{return lhs < rhs;}
};struct classcomp_greater {bool operator() (const int& lhs, const int& rhs) const{return lhs > rhs;}
};struct Point { int x, y; };
struct PointCmp_greater {bool operator()(const Point& lhs, const Point& rhs) const {return std::hypot(lhs.x, lhs.y) > std::hypot(rhs.x, rhs.y);//hypot计算三解形的斜边长}
};
struct PointCmp_less {bool operator()(const Point& lhs, const Point& rhs) const {return std::hypot(lhs.x, lhs.y) < std::hypot(rhs.x, rhs.y);}
};void createSetInit()
{string str = "《凉州词(王翰)》 葡萄美酒夜光杯,欲饮琵琶马上催。醉卧沙场君莫笑,古来征战几人回? ";//1.创建setstring strVal[] = {"first", "second", "three", "fifth"};set<string> set1(strVal, strVal + 4);cout << "set1.size = " << set1.size() << " set1.empty = " << set1.empty() << " set1.max_size = " << set1.max_size() << endl;cout << "set1.size = " << set1.size() << " set1.empty = " << set1.empty() << " set1.max_size = " << set1.max_size() << endl;cout << "set1的值为: ";set<string>::iterator iter1;for(iter1 = set1.begin(); iter1 != set1.end(); iter1++){cout << *iter1 << "\t";}cout << endl;//2.列表初始化set<int> set2 = {1, 2, 3, 4};cout << "set2.size = " << set2.size() << " set2.empty = " << set2.empty() << " set2.max_size = " << set2.max_size() << endl;cout << "set2的值为: ";for(auto &val: set2){cout << val << "\t";}cout << endl;//3.赋值初始化set<int> set3 = set2;cout << "set3的值为: ";for(auto &val: set3){cout << val << "\t";}cout << endl;//4.拷贝初始化set<string> set4(set1);cout << "set4.size = " << set4.size() << " set4.empty = " << set4.empty() << " set4.max_size = " << set4.max_size() << endl;cout << "set4的值为: ";for(auto &val: set4){cout << val << "\t";}cout << endl;//5.范围初始化set<int> set5(set2.begin(), set2.end());cout << "set5.size = " << set5.size() << " set5.empty = " << set5.empty() << " set5.max_size = " << set5.max_size() << endl;cout << "set5的值为: ";for(auto &val: set5){cout << val << "\t";}cout << endl;//6.移动构造函数set<string> set6(std::move(set1));cout << "set6.size = " << set6.size() << " set6.empty = " << set6.empty() << " set6.max_size = " << set6.max_size() << endl;auto iter6 = set6.begin();cout << "set6的值为: ";while (iter6 != set6.end()){cout << *iter6 << "\t";iter6++;}cout << endl;cout << "-----------------------" << endl;// class as Comparestd::set<int> set7 = {1, 7, 3, 4, 3};//最后一个数会失效auto iter7 = set7.begin();//默认是升序输出的cout << "默认是升序输出的 set7的值为: ";while (iter7 != set7.end()){cout << *iter7 << "\t";iter7++;}cout << endl;std::set<int, classcomp_less> set8 = {1, 7, 3, 4, 3};//最后一个数会失效auto iter8 = set8.begin();cout << "升序输出 set8的值为: ";//升序输出while (iter8 != set8.end()){cout << *iter8 << "\t";iter8++;}cout << endl;std::set<int, classcomp_greater> set9 = {1, 7, 3, 4, 3};//最后一个数会失效auto iter9 = set9.begin();cout << "降序输出 set9的值为: ";//降序输出while (iter9 != set9.end()){cout << *iter9 << "\t";iter9++;}cout << endl;//也可以调用系统自带的比较函数,例如greater,less, 要包含头文件functionalstd::set<int, greater<int>> set10 = {1, 7, 3, 4, 3};//最后一个数会失效auto iter10 = set10.begin();cout << "降序输出 set10的值为: ";//降序输出while (iter10 != set10.end()){cout << *iter10 << "\t";iter10++;}cout << endl;std::set<int, less<int>> set11 = {1, 7, 3, 4, 3};//最后一个数会失效auto iter11 = set11.begin();cout << "升序输出 set11的值为: ";//降序输出while (iter11 != set11.end()){cout << *iter11 << "\t";iter11++;}cout << endl;bool(*fn_pt)(int,int) = fncomp_less;std::set<int, bool(*)(int,int)> set12 (fn_pt); // function pointer as Compareset12.insert(1);set12.insert(7);set12.insert(4);set12.insert(3);auto iter12 = set12.begin();cout << "升序输出 set12的值为: ";//降序输出while (iter12 != set12.end()){cout << *iter12 << "\t";iter12++;}cout << endl;bool(*fn_pt_greater)(int,int) = fncomp_greater;std::set<int, bool(*)(int,int)> set13 (fn_pt_greater);set13.insert(1);set13.insert(7);set13.insert(4);set13.insert(3);auto iter13 = set13.begin();cout << "升序输出 set13的值为: ";//升序输出while (iter13 != set13.end()){cout << *iter13 << "\t";iter13++;}cout << endl;//自定义类型比较std::set<Point, PointCmp_greater> set14 = {{1, 2}, {7, 8}, {3, 4}, {3, 5}};set14.insert({8, 7}); // 这会失败,因为 8,7 的斜边长度等于 7,8cout << "降序输出 set14的值为: ";for(auto& p: set14)cout << '(' << p.x << ',' << p.y << ") ";cout << endl;std::set<Point, PointCmp_less> set15 = {{1, 2}, {7, 8}, {3, 4}, {3, 5}};set15.insert({8, 7});cout << "升序输出 set15的值为: ";for(auto& p: set15)cout << '(' << p.x << ',' << p.y << ") ";cout << endl;
}int main()
{createSetInit();cout << "Hello, world!" << endl;return 0;
}
运行结果
参考:
http://www.cplusplus.com/reference/set/set/
https://zh.cppreference.com/w/cpp/container/set
set学习之创建,初始化,赋值操作operator=, empty,size相关推荐
- multimap学习之创建,初始化,赋值操作operator=, empty,size,max_size
multimap 是关联容器,含有键值对的已排序列表,其功能与map一样,唯一不同的是,它容许多个元素拥有同一键.本篇学习map的创建,初始化,赋值操作operator=, empty,size,ma ...
- multiset学习之创建,初始化,赋值操作operator=, empty,size
本篇开始学习multiset,与set相比,multiset可以有多个相关的关键字,其它也set的功能一样,下面我们先来学习它的创建,初始化,赋值操作operator=, empty,size等相关操 ...
- C语言--关于指针两种初始化赋值操作
首先,什么叫做指针的初始化? int * p = NULL:在定义指针变量p的同时把p的值设置为0x00000000;而不是把*p的值设置为0x00000000.这个过程叫做初始化. 探讨: int ...
- forword_list学习之创建,初始化assign,赋值操作operator=, 元素访问front,交换内容swap,检查容器是否为空empty
forword_list是C++11新增的一个顺序容器,它是支持从容器的任何位置快速插入和移动元素的容器.不支持快速随机访问.它实现为单链表,且实质上与其在C中实现相比无任何开销.与std::list ...
- pandas学习笔记三之赋值操作
- matlab学习笔记11_3高维数组操作 filp, shiftdim, size, permute, ipermute
一起来学matlab-matlab学习笔记11 11_3 高维数组处理和运算 filp, shiftdim, size, permute, ipermute 觉得有用的话,欢迎一起讨论相互学习~ fi ...
- 【C++】类的成员初始化表与构造函数内赋值操作
我们常常在初始化类数据成员的时候,对使用初始化表和在构造函数中十分困惑,这二者有什么区别呢?我们应该如何选择呢? 先举个简单的例子,看下面的两段代码: 代码A: inline Account::Acc ...
- 关于学习Python的一点学习总结(26->自定义函数及创建初始化数据结构函数)
62.自定义函数: 1.判断某个对象是否可调用,使用内置函数callable >>> import math>>> x=1>>> y=math.s ...
- 【STL】string详解(string类常用的操作函数、构造函数、赋值操作、子符串的拼接、查找和替换、比较、存取、插入和删除、获取)
目录 1. string容器 简介 2. string类常用的操作函数 3. 构造函数 4. 赋值操作 5. 字符串拼接 6. 字符串查找和替换 7. 字符串比较 8. 字符串存取 9. 字符串插入和 ...
最新文章
- Python使用PIL将png图片转化为jpg图片
- 知识图谱的皇冠:知识图谱推理的前世今生
- jquery实现登录失败提示_浅谈jQuery的verify验证码
- 栈应用:中缀表达式转后缀表达式
- 电脑画画软件_绘画软件分享,还不过来看!
- 《中国人工智能学会通讯》——4.40 什么是类人概念学习?
- 按键精灵设置脚本过期日期
- css视差滑动(阅读网站案例)
- 记录一次实战破解无线wifi——Aircrack-ng
- 互联网下半场的基本玩法
- “身体质量指数BMI”实例详解
- 兔年新春,快来领取你的春节全屏动效吧
- java jmf获取图像_java利用jmf实现拍照功能
- 不连接显示器或者HDMI欺骗器来 使用Moonlight串流游戏
- c调用python第三方库_c/c++调用python程序且含tensorflow第三方库
- HTML5 CSS3 专题 诱人的实例 3D旋转木马效果相册
- 15个iOS的视频播放控件
- lib/python3.7/site-packages/torch/lib/../../../../libgomp.so.1: version `GOMP_4.0‘ not found (requir
- 调侃计算机专业的句子,调侃生活的幽默句子
- 婚姻出问题女人应该捂紧钱袋