昆明猫咪网站建设公司,app开发企业网站建设,如何提高wordpress后台的访问速度,wordpress站点错误文章目录set/multiset容器1 set容器 基本概念2 set容器 构造和赋值3 set容器 大小和交换4 set容器 插入和删除5 set容器 查找和统计set/multiset容器
1 set容器 基本概念
简介#xff1a; 所有元素都会在插入时会被自动排序#xff0c;例如#xff0c;在set容器放入元素1、…
文章目录set/multiset容器1 set容器 基本概念2 set容器 构造和赋值3 set容器 大小和交换4 set容器 插入和删除5 set容器 查找和统计set/multiset容器
1 set容器 基本概念
简介 所有元素都会在插入时会被自动排序例如在set容器放入元素1、5、9、3、4、7时打印输出变成1、3、4、5、7、9.
本质 set/multiset属于关联式容器底层结构是用二叉树实现。
set和multiset区别
set不允许容器中有重复的元素不能插重值元素multiset允许容器中有重复的元素可以插重值元素两个容器使用时包含头文件#includeset即可
2 set容器 构造和赋值
功能描述 创建set容器以及赋值
构造
setT st; //默认构造函数set(const set st); //拷贝构造函数 注意 和之前的容器不同没有像string、vector、deque、list一样有push_back()、push_front()、pop_back()、pop_front()插入数据也没有像stack、queue一样有push()和pop()插入数据。set插入数据时只有insert()。
赋值
set operator(const set st); //重载等号操作符
代码示例
void printSet(const setint s)
{for (setint::const_iterator it s.begin(); it ! s.end(); it){cout *it ;}cout endl;
}void printmMultiset(const multisetint s)
{for (multisetint::const_iterator it s.begin(); it ! s.end(); it){cout *it ;}cout endl;
}void test()
{int n 50;setint s1;//set只有insert()方式插入数据s1.insert(18);s1.insert(23);s1.insert(25);s1.insert(23);s1.insert(21);s1.insert(23);s1.insert(20);cout 默认构造 set\t s1;//set容器特点所有元素插入时会被排序且不允许有重复元素printSet(s1);cout string(n, -) endl;setint s2(s1);cout 拷贝构造 set\t s2;printSet(s2);cout string(n, -) endl;setint s3;s3 s2;cout 复制操作 set\t s3;printSet(s3);cout string(n, -) endl;multisetint s4;//multiset只有insert()方式插入数据s4.insert(18);s4.insert(23);s4.insert(25);s4.insert(23);s4.insert(21);s4.insert(23);s4.insert(20);cout 默认构造 multiset s4;//multiset容器特点所有元素插入时会被排序且允许有重复元素printmMultiset(s4);cout string(n, -) endl;
}总结
set容器插入数据时用insertset容器插入数据的数据会自动排序set不允许有重复元素mutiset允许有重复元素
3 set容器 大小和交换
功能描述 统计set容器大小以及交换set容器
函数原型
size(); //返回容器中元素的数目empty(); //判断容器是否为空swap(st); //交换两个集合容器
注意 在set中没有resize()不允许重新指定大小。在之前学习的容器中resize()默认机制是0填充而set不允许有重复值所有不能有resize()。
代码示例
void printSet(const setint s)
{for (setint::const_iterator it s.begin(); it ! s.end(); it){cout *it ;}cout endl;
}void printmMultiset(const multisetint s)
{for (multisetint::const_iterator it s.begin(); it ! s.end(); it){cout *it ;}cout endl;
}void setisEmpty(const setint s)
{if (s.empty()){cout set容器为空 endl;}else{cout set容器不为空且容器大小为 s.size() endl;}
}//大小
void test1()
{cout 大小操作\n endl;int n 50;setint s1;cout 插值前 set\ts1;printSet(s1);setisEmpty(s1);cout string(n, -) endl;//set只有insert()方式插入数据s1.insert(18);s1.insert(23);s1.insert(25);s1.insert(23);s1.insert(21);s1.insert(23);s1.insert(20);cout 插值后 set\ts1;printSet(s1);setisEmpty(s1);cout string(n, -) endl;
}//交换
void test2()
{cout \n交换操作\n\n交换前 endl;int n 50;multisetint s1;s1.insert(18);s1.insert(23);s1.insert(25);s1.insert(23);s1.insert(21);s1.insert(23);s1.insert(20);cout multiset\ts1;printmMultiset(s1);cout string(n, ) endl;multisetint s2;s2.insert(14);s2.insert(10);s2.insert(15);s2.insert(11);s2.insert(12);s2.insert(13);cout multiset\ts2;printmMultiset(s2);cout string(n, -) endl;cout 交换后\ns1;printmMultiset(s1);cout string(n, ) endl;cout s2;printmMultiset(s2);cout string(n, -) endl;
}总结
统计大小 — size不支持resize判断是否为空 — empty交换容器 — swap
4 set容器 插入和删除
功能描述 set容器进行插入数据和删除数据
函数原型
insert(elem); //在容器中插入元素。clear(); //清除所有元素erase(pos); //删除pos迭代器所指的元素返回下一个元素的迭代器。erase(beg, end); //删除区间[beg,end)的所有元素 返回下一个元素的迭代器。erase(elem); //删除容器中值为elem的元素。
注意 没有头插头删和尾插尾删的操作插入只有insert。set的删除可以传入迭代器、区间还可以指定值删除类似于list的remove。
代码示例
void printSet(const setint s)
{for (setint::const_iterator it s.begin(); it ! s.end(); it){cout *it ;}cout endl;
}//插入
void test1()
{int n 50;setint s1;//set只有insert()方式插入数据s1.insert(18);s1.insert(23);s1.insert(25);s1.insert(23);s1.insert(21);s1.insert(23);s1.insert(20);cout 删除前\t\ts1;printSet(s1);cout string(n, -) endl;//删除s1.erase(s1.begin());//删除第一个元素cout 删除第一个元素\ts1;printSet(s1);cout string(n, -) endl;s1.erase(21);//删除指定元素cout 删除指定元素\ts1;printSet(s1);cout string(n, -) endl;//清空//s1.erase(s1.begin(), s1.end());//erase清空s1.clear();cout 清空\t\ts1;printSet(s1);cout string(n, -) endl;
}总结
插入 — insert删除 — erase可以指定元素删除类似list的remove清空 — clear
5 set容器 查找和统计
功能描述 对set容器进行查找数据以及统计数据
函数原型
find(key); //查找key是否存在若存在返回该键的元素的迭代器若不存在返回set.end()结束的位置count(key); //统计key的元素个数。对set而言返回值是0或1set不允许有重复值对multiset而言返回值有可能大于1multiset允许有重复值。
代码示例
void printSet(const setint s)
{for (setint::const_iterator it s.begin(); it ! s.end(); it){cout *it ;}cout endl;
}void printMultiset(const multisetint s)
{for (multisetint::const_iterator it s.begin(); it ! s.end(); it){cout *it ;}cout endl;
}void test1()
{int n 50;setint s1;s1.insert(18);s1.insert(23);s1.insert(25);s1.insert(23);s1.insert(21);s1.insert(23);s1.insert(20);multisetint s2;s2.insert(18);s2.insert(23);s2.insert(25);s2.insert(23);s2.insert(21);s2.insert(23);s2.insert(20);cout s1;printSet(s1);cout string(n, ) endl;cout s2;printMultiset(s2);cout string(n, -) endl;//查找cout \n查找 endl;setint::iterator pos1 s1.find(21);cout 查找21元素\ns1;if (pos1!s1.end()){cout 查找成功值为 * pos1 endl;}else{cout 查找失败值不存为或为空容器 endl;}cout string(n, ) endl;setint::iterator pos2 s2.find(21);cout 查找21元素\ns2;if (pos2 ! s2.end()){cout 查找成功值为 *pos2 endl;}else{cout 查找失败值不存为或为空容器 endl;}cout string(n, -) endl;//统计cout \n统计 endl;int num1 s1.count(23);cout set s1中23的个数为 num1 endl;cout string(n, -) endl;int num2 s2.count(23);cout multiset s2中23的个数为 num2 endl;cout string(n, -) endl;
}总结
查找 — find 返回的是迭代器统计 — count 对于set结果为0或者1