网站建设综合实训总结,关键词排名优化价格,如何用一个域名做多个网站,公司网站与营销网站区别set/multiset容器 Set基本概念set构造和赋值set的大小和交换set的插入和删除set查找和统计 set和multiset的区别pair对组两种创建方式 set容器排序 Set基本概念
所有元素都会在插入时自动被排序。 set/multist容器属于关联式容器#xff0c;底层结构属于二叉树。 set不允许容… set/multiset容器 Set基本概念set构造和赋值set的大小和交换set的插入和删除set查找和统计 set和multiset的区别pair对组两种创建方式 set容器排序 Set基本概念
所有元素都会在插入时自动被排序。 set/multist容器属于关联式容器底层结构属于二叉树。 set不允许容器中有重复的元素multiset允许容器中有重复的元素。
set构造和赋值
1、setT st;默认构造函数 2、set(const set st);拷贝构造函数 3、set operator(const set st);赋值
void test1() {setint st;st.insert(10);st.insert(40);st.insert(30);st.insert(1);st.insert(30);p(st);setint s2(st);p(s2);setint s3;s3 s2;p(s3);
}set的大小和交换
1、empty();判断容器是否为空 2、size();返回容器中元素的个数 3、swap(st);交换两个集合容器
void test1() {...if (!st.empty()) {cout 大小 st.size()endl;}setint s2;s2.insert(32);s2.insert(23);s2.insert(43);st.swap(s2);p(st);
}set的插入和删除
1、insert(elem);插入只有这一种方法 2、clear();清空所有元素 3、erasepos删除pos位置的元素返回下一个数据的位置 4、erasebegend删除迭代器从beg到end之间的元素返回下一个数据的位置 5、erase(elem);删除容器中值为elem的元素
void test1() {
...st.erase(st.begin());st.erase(st.begin(), --st.end());p(st);st.erase(10);p(st);st.clear();p(st);
}set查找和统计
1、find(key);查找key是否存在若存在返回该键的元素的迭代器若不存在返回set.end() 2、count(key);统计key的元素个数
void test1() {...setint::iterator posst.find(40);if (pos ! st.end()) {cout 找到 *pos endl;}else {cout 没找到 endl;}cout st.count(30) endl;//统计的结果式0或1
}set和multiset的区别
1、set不可以插入重复数据multiset可以 2、set插入数据的同时会返回插入结果表示插入成功 3、multiset不会监测数据因此可以插入重复数据
void test1() {setint st;pairsetint::iterator, bool ret st.insert(30);if (ret.second) {cout 第一次插入成功 endl;}else {cout 第一次插入失败 endl;}retst.insert(30);if (ret.second) {cout 第二次插入成功 endl;}else {cout 第二次插入失败 endl;}
}m.insert(10);//直接插入不会检测m.insert(10);for (multisetint::const_iterator it m.begin();it ! m.end();it) {cout (*it) ;}cout endl;返回是一个对组
multiset插入返回的是一个迭代器
pair对组
两种创建方式
1、pairtype,type p(value1,value2); 2、pairtype,type pmake_pair(value1,value2);
void test() {pairstring, intp(Tom, 20);cout 姓名 p.first 年龄 p.second endl;pairstring, intp1make_pair(Ala, 23);cout 姓名 p1.first 年龄 p1.second endl;
}set容器排序
在使用仿函数排序时需要加const不可修改不然会报错set的排序规则下定义是需要设置好默认是升序。
class S {
public:int age;string name;int h;S(string _n, int _a,int _h) {name _n;age _a;h _h;}
};
class compareS {
public:bool operator()(S v1, S v2) const{return v1.age v2.age;}
};
class MyCompare {
public:bool operator()( int v1, int v2)const {return v1 v2;}
};
//内置类型排序
void test1() {//指定排序规则为大到小setint,MyCompare s2;s2.insert(10);s2.insert(40);s2.insert(30);s2.insert(1);s2.insert(30);for (setint,MyCompare::iterator it s2.begin();it ! s2.end();it) {cout (*it) ;}
}
//自定义类型排序
void test() {setS, compareS s;S s1(Tom, 18, 187);S s2(Lisa, 20, 165);S s3(LuJy, 34, 190);S s4(Tony, 21, 167);S s5(Ala, 20, 168);s.insert(s1);s.insert(s2);s.insert(s3);s.insert(s4);s.insert(s5);for (setS, compareS::iterator it s.begin();it ! s.end();it) {cout 姓名 (*it).name \t年龄 (*it).age \t身高 (*it).h endl;}
}