搜索关键字搜索到网站,杭州seo博客,网站建设人员叫什么,娄底网站推广1. set 基本概念
简介#xff1a;
所有元素都会在插入时自动排序本质#xff1a;
set/multiset属于关联式容器#xff0c;底层结构是用二叉树实现。set 和 multiset 区别#xff1a;
set容器不允许有重复的元素。
multiset允许有重复的元素。2. set 构造和赋值
构造
所有元素都会在插入时自动排序本质
set/multiset属于关联式容器底层结构是用二叉树实现。set 和 multiset 区别
set容器不允许有重复的元素。
multiset允许有重复的元素。2. set 构造和赋值
构造
setT st; // 默认构造函数
setT st(const T x); // 将x拷贝到st中赋值
set operator(const set st); // 将st赋值给当前set #include iostream
#include fstream
#include string
#include set
using namespace std;//set 构造和赋值void printSet(const setint s){for(setint::iterator it s.begin(); it ! s.end(); it){cout *it ;}cout endl;
}void test01() {setint s1;// 插入数据只有insert一种方式s1.insert(10); // 插入元素s1.insert(30);s1.insert(60);s1.insert(20);s1.insert(20);// set容器的特点所有元素都会在插入时自动被排序// set容器不允许插入重复数据printSet(s1);// 拷贝构造setint s2(s1);printSet(s2);// 赋值setint s3;s3 s1;printSet(s3);
}int main(int argc, char const *argv[]) {test01();return 0;
}
3. set 大小和交换
功能描述
统计set容器大小以及交换set 容器函数原型
size(); // 返回set中元素的个数
empty(); // 判断set是否为空
swap(setT s); // 交换sets#include iostream
#include fstream
#include string
#include set
using namespace std;//set 大小和交换void printSet(const setint s){for(setint::iterator it s.begin(); it ! s.end(); it){cout *it ;}cout endl;
}// 大小
void test01() {setint s;s.insert(20);s.insert(10);s.insert(30);s.insert(40);printSet(s);// 判断是否为空if(s.empty()) {cout s is empty endl;}else{cout s is not empty endl;}cout s.size() s.size() endl;}// 交换
void test02() {setint s;s.insert(20);s.insert(10);s.insert(30);s.insert(40);setint s2;s2.insert(100);s2.insert(200);s2.insert(300);cout 交换前 endl;printSet(s);printSet(s2);cout 交换后 endl;s.swap(s2);printSet(s);printSet(s2);}int main(int argc, char const *argv[]) {test02();return 0;
}
4. set插入和删除操作
函数原型
void insert(const value_type val); // 插入元素
clear(); // 清除所有元素
erase(iterator pos); // 删除pos位置的元素返回下一个元素的迭代器
erase(iterator start, iterator end); // 删除从start到end之间的元素返回下一个元素的迭代器
erase(const value_type val); // 删除值为val元素返回删除元素的个数#include iostream
#include fstream
#include string
#include set
using namespace std;// set插入和删除操作void printSet(const setint s){for(setint::iterator it s.begin(); it ! s.end(); it){cout *it ;}cout endl;
}// 大小
void test01() {setint s;s.insert(20);s.insert(10);s.insert(30);s.insert(40);s.insert(50);s.insert(100);printSet(s);s.erase(s.begin());printSet(s);s.erase(s.begin(), --s.end());printSet(s);s.erase(20);printSet(s);cout 清空集合 endl;s.clear();printSet(s);}int main(int argc, char const *argv[]) {test01();return 0;
}
5 set 查找和统计
函数原型
find(const key_type key); // 查找key是否存在若存在返回该元素的迭代器若不存在返回结束迭代器end()
count(const key_type key); // 统计key的个数#include iostream
#include fstream
#include string
#include set
using namespace std;// set 查找和统计
// 函数原型// find(const key_type key); // 查找key是否存在若存在返回该元素的迭代器若不存在返回结束迭代器end()
// count(const key_type key); // 统计key的个数void printSet(const setint s){for(setint::iterator it s.begin(); it ! s.end(); it){cout *it ;}cout endl;
}// 大小
void test01() {setint s;s.insert(20);s.insert(10);s.insert(30);s.insert(40);s.insert(50);s.insert(100);setint::iterator it s.find(50);if(it s.end()){cout 找不到 endl;}else{cout 找到了 *it endl;}// 统计key的个数, 找到返回1找不到返回0int count s.count(10);cout count count endl;}int main(int argc, char const *argv[]) {test01();return 0;
}
6 set 和 multiset的区别
区别
set不可以插入重复数据而multiset可以
set插入数据同时会返回插入结果表示插入是否成功
multiset 不会检测数据因此可以插入重复数据#include iostream
#include fstream
#include string
#include set
using namespace std;// set 和 multiset的区别void printSet(const setint s){for(setint::iterator it s.begin(); it ! s.end(); it){cout *it ;}cout endl;
}// 大小
void test01() {setint s;pairsetint::iterator,bool ret s.insert(20);if(ret.second true){cout 第一次插入成功 endl;}else{cout 第一次插入失败 endl;}ret s.insert(20);if(ret.second true){cout 第二次插入成功 endl;}else{cout 第二次插入失败 endl;}multisetint ms;// 允许重复插入ms.insert(20);ms.insert(20);ms.insert(20);ms.insert(20);ms.insert(20);for(multisetint::iterator it ms.begin(); it ! ms.end(); it){cout *it ;}cout endl;
}int main(int argc, char const *argv[]) {test01();return 0;
}
7 pair对组创建
功能描述
成对出现的数据利用对组可以返回两个数据两种创建方式
pairint,int p(value1,value2); // 创建一个pair对组value1和value2分别对应pair的两个元素
pairint,int p make_pair(value1,value2); // 创建一个pair对组value1和value2分别对应pair的两个元素#include iostream
#include fstream
#include string
#include set
using namespace std;// pair对组创建// 大小
void test01() {// 第一种创建方式pairstring, int p1(西施, 20);cout p1.first p1.second endl;// 第二种创建方式pairstring, int p2 make_pair(貂蝉, 18);cout p2.first p2.second endl;}int main(int argc, char const *argv[]) {test01();return 0;
}
8 set 容器排序
目标
set容器默认排序规制为从小到大掌握如何改变排序规则主要技术点
利用防函数可以改变排序规则#include iostream
#include fstream
#include string
#include set
using namespace std;// set 容器排序void printSet(setint s) {for(setint::iterator it s.begin(); it ! s.end(); it) {cout *it ;}cout endl;
}class MyCompare {
public:bool operator()(int a,int b) const{// 比较逻辑return a b;}
};//
void test01() {setint s;s.insert(10);s.insert(30);s.insert(20);s.insert(40);s.insert(50);printSet(s);//指定排序规制从大到小setint,MyCompare s2;s2.insert(10);s2.insert(30);s2.insert(20);s2.insert(40);s2.insert(50);for(setint,MyCompare::iterator it s2.begin(); it ! s2.end(); it) {cout *it ;}cout endl;
}int main(int argc, char const *argv[]) {test01();return 0;
}
#include iostream
#include fstream
#include string
#include set
using namespace std;// set 容器排序
class Person {public:Person(string name, int age) {this-age age;this-name name;}string name;int age;
};class MyCompare {
public:// const 不能省bool operator()(const Person a, const Person b) const{// 比较逻辑return a.age b.age;}
};void printSet(setPerson,MyCompare s) {for(setPerson,MyCompare::iterator it s.begin(); it ! s.end(); it) {cout name: it-name age: it-age endl;}cout endl;
}void test01() {//自定义数据类型必须要指定排序规则setPerson, MyCompare s;s.insert(Person(西施, 18));s.insert(Person(王昭君, 19));s.insert(Person(杨玉环, 17));s.insert(Person(貂蝉, 16));printSet(s);}int main(int argc, char const *argv[]) {test01();return 0;
}