晋江建设银行招聘网站,零基础做电商从什么做起,网站开发设计工程师工作前景,东莞展厅设计公司目录 一、set容器
1.1 简介
1.2 构造和赋值
1.3 大小和交换
1.4 插入和删除
1.5 查找和统计
1.6 set和multiset区别
1.7 内置类型指定排序规则
1.8 自定义数据类型指定排序规则 一、set容器
1.1 简介
① set容器中所有元素在插入时自动被排序。
② set容器和multise…目录 一、set容器
1.1 简介
1.2 构造和赋值
1.3 大小和交换
1.4 插入和删除
1.5 查找和统计
1.6 set和multiset区别
1.7 内置类型指定排序规则
1.8 自定义数据类型指定排序规则 一、set容器
1.1 简介
① set容器中所有元素在插入时自动被排序。
② set容器和multiset容器属于关联式容器底层结构用二叉树实现。
③ set容器与multiset容器区别
set容器不允许容器中有重复的元素。multiset容器允许容器中有重复的元素。1.2 构造和赋值
① 功能描述创建set容器以及赋值。
② 构造函数
set st; //默认构造函数set(const set st); //拷贝构造函数
③ 赋值函数
set operator(const set st); //重载等号操作符
④ set容器插入数据时用insert。
⑤ set容器插入的数据会自动排序。
#includeiostream
using namespace std;
#include set//set容器 构造和赋值void printset(const setintL)
{for (setint::const_iterator it L.begin(); it ! L.end(); it){cout *it ;}cout endl;
}bool myCopare(int v1, int v2)
{//降序 就让第一个数 大于第二个数为真return v1 v2;}void test01()
{setints1; //插入数据 只有insert方式s1.insert(10);s1.insert(40);s1.insert(30);s1.insert(20);s1.insert(30);//遍历容器//set容器特点所有元素插入时候自动被排序//set容器不允许插入重复值printset(s1);//拷贝构造setints2(s1);printset(s2);//赋值setints3;s3 s2;printset(s3);
}int main() {test01();system(pause);return 0;}
运行结果10 20 30 40
10 20 30 40
10 20 30 40
请按任意键继续. . . 1.3 大小和交换
① 功能描述统计set容器大小以及交换set容器。
② 函数原型
size(); //返回容器中元素的数目。empty(); //判断容器是否为空。swap(st); //交换两个集合容器
#includeiostream
using namespace std;
#include set//set容器 大小和交换void printset(const setintL)
{for (setint::const_iterator it L.begin(); it ! L.end(); it){cout *it ;}cout endl;
}//大小
void test01()
{setints1; //插入数据 只有insert方式s1.insert(10);s1.insert(40);s1.insert(30);s1.insert(20);s1.insert(30);printset(s1);//判断是否为空if (s1.empty()){cout s1为空 endl;}else{cout s1不为空 endl;cout s1的大小为 s1.size() endl;}
}//交换
void test02()
{setints1;//插入数据 只有insert方式s1.insert(10);s1.insert(40);s1.insert(30);s1.insert(20);s1.insert(30);setints2;//插入数据 只有insert方式s2.insert(100);s2.insert(400);s2.insert(300);s2.insert(200);s2.insert(300);cout 交换前 endl;printset(s1);printset(s2);cout 交换后 endl;s1.swap(s2);printset(s1);printset(s2);
}int main() {test01();test02();system(pause);return 0;}
运行结果10 20 30 40
s1不为空
s1的大小为4
交换前
10 20 30 40
100 200 300 400
交换后
100 200 300 400
10 20 30 40
请按任意键继续. . . 1.4 插入和删除
① 功能描述set容器进行插入数据和删除数据。
② 函数原型
insert(elem); //在容器中插入元素。clear(); //清除所有元素。erase(pos); //删除pos迭代器所指的元素返回下一个元素的迭代器。erase(beg,end); //删除区间[beg,end)的所有元素返回下一个元素的迭代器。erase(elem); //删除容器中值为elem的元素。
#includeiostream
using namespace std;
#include set//set容器 插入和删除void printset(const setintL)
{for (setint::const_iterator it L.begin(); it ! L.end(); it){cout *it ;}cout endl;
}void test01()
{setints1; //插入数据 只有insert方式s1.insert(20);s1.insert(40);s1.insert(30);s1.insert(10);s1.insert(30);printset(s1);//删除s1.erase(s1.begin()); //删掉的是排序后的第一个元素10printset(s1);//删除函数的重载版本s1.erase(30); //删除30这个元素printset(s1);//清空方式一s1.erase(s1.begin(), s1.end());printset(s1);//清空方式二s1.clear();printset(s1);
}int main()
{test01();system(pause);return 0;
}
运行结果10 20 30 40
20 30 40
20 40
请按任意键继续. . . 1.5 查找和统计
① 功能描述对set容器进行查找书籍以及统计数据。
② 函数原型
find(key); //查找key是否存在若存在返回该键的元素的迭代器若不存在返回set.end();cout(key); //统计key的元素个数。
#includeiostream
using namespace std;
#include set//set容器 查找和统计void printset(const setintL)
{for (setint::const_iterator it L.begin(); it ! L.end(); it){cout *it ;}cout endl;
}void test01()
{setints1; //插入数据 只有insert方式s1.insert(20);s1.insert(40);s1.insert(30);s1.insert(10);s1.insert(30);printset(s1);//查找返回的是一个迭代器setint::iterator pos s1.find(30); if (pos ! s1.end()){cout 找到元素 *pos endl;}else{cout 未找到元素 endl;}
}//统计
void test02()
{setints1;//插入数据 只有insert方式s1.insert(20);s1.insert(40);s1.insert(30);s1.insert(10);s1.insert(30);int num s1.count(30);//对于set而言 统计结果要么是0 要么是1cout num num endl;
}int main() {test01();test02();system(pause);return 0;}
运行结果10 20 30 40
找到元素30
num 1
请按任意键继续. . . 1.6 set和multiset区别
① set和multiset区别
set不可以插入重复数据而multiset可以。set插入数据的同时会返回插入结果表示插入是否成功。mutiset不会检测数据因此可以插入重复数据。
② 如果不允许插入重复数据可以利用set
③ 如果需要插入重复数据利用mutiset
#includeiostream
using namespace std;
#include set//set容器 和 mutiset容器 的区别void printset(const setintL)
{for (setint::const_iterator it L.begin(); it ! L.end(); it){cout *it ;}cout endl;
}void test01()
{setints1; pairsetint::iterator, bool ret s1.insert(10); //s.insert(数)返回的是pair类型第一个数为迭代器第二个数为布尔类型if (ret.second){cout 第一次插入成功 endl;}else{cout 第一次插入失败 endl;}ret s1.insert(10); //set不允许插入重复的值当插入重复的值返回的第二个参数为False然后不会插入进去if (ret.second){cout 第二次插入成功 endl;}else{cout 第二次插入失败 endl;}multisetintms;//运行插入重复值ms.insert(10);ms.insert(10);ms.insert(10);for (multisetint::const_iterator it ms.begin(); it ! ms.end(); it){cout *it ;}cout endl;
}int main()
{test01();system(pause);return 0;
}
运行结果第一次插入成功
第二次插入失败
10 10 10
请按任意键继续. . 1.7 内置类型指定排序规则
① set容器默认排序规则从小到大利用仿函数可以改变排序规则。
#includeiostream
using namespace std;
#include set//set容器排序class MyCompare
{
public:bool operator()(int v1, int v2)const //第一个()表示重载符号第二个()为参数列表{return v1 v2;}
};void test01()
{setints1; //set容器默认从小到大排序s1.insert(10);s1.insert(40);s1.insert(50);s1.insert(20);s1.insert(30);for (setint::iterator it s1.begin(); it ! s1.end(); it){cout *it ;}cout endl;//指定排序规则为从大到小setint, MyCompares2; //此时指定set容器的排序规则为MyCompareMyCompare()s2.insert(10);s2.insert(40);s2.insert(50);s2.insert(20);s2.insert(30);for (setint, MyCompare::iterator it s2.begin(); it ! s2.end(); it){cout *it ;}cout endl;
}int main()
{test01();system(pause);return 0;
}
运行结果10 20 30 40 50
50 40 30 20 10
请按任意键继续. . . 1.8 自定义数据类型指定排序规则
#includeiostream
using namespace std;
#include set//set容器排序class Person
{
public:Person(string name, int age){this-m_Name name;this-m_Age age;}string m_Name;int m_Age;
};class comparePerson //仿函数本质是一个类
{
public:bool operator()(const Person p1, const Person p2)const{//安装年龄 降序return p1.m_Age p2.m_Age;}
};void test01()
{//自定义数据类型 都会指定排序规则setPerson, comparePersons1;//创建Person对象Person p1(刘备, 24);Person p2(关羽, 28);Person p3(张飞, 25);Person p4(赵云, 21);s1.insert(p1);s1.insert(p2);s1.insert(p3);s1.insert(p4);for (setPerson, comparePerson::iterator it s1.begin(); it ! s1.end(); it){cout 姓名 it-m_Name 年龄 it-m_Age endl;}
}int main()
{test01();system(pause);return 0;
}
运行结果姓名关羽年龄28
姓名张飞年龄25
姓名刘备年龄24
姓名赵云年龄21
请按任意键继续. . .