本文共 8043 字,大约阅读时间需要 26 分钟。
1、set的基本操作
(1)、set的删除、插入操作
代码如下:
#include #include using namespace std;//set底层是红黑树,其所包含的元素是唯一的,集合中的元素按一定的顺序排列,元素插入过程是按排序规则插入,所>以不能指定插入位置;int main(void){ //set 集合 元素唯一 自动排序(默认情况下是从小到大) 不能按照[]方式插入元素 底层红黑树 set set1; for(int i = 0; i < 5; i++){ set1.insert(34); set1.insert(24); set1.insert(14); set1.insert(84); set1.insert(-4); } //插入重复的元素 set1.insert(100); set1.insert(100); set1.insert(100); set1.insert(100); set ::iterator it; for(it = set1.begin(); it != set1.end(); it++){ cout<<*it<<" "; } cout<
::iterator it = set1.begin(); cout<<*it<<" "; set1.erase(set1.begin()); } cout<
(2)、set的排序
代码如下:
#include #include using namespace std;//对于基础数据可以进行排序,复杂数据类型的排序是怎么回事?------>仿函数解决int main(void){ set set1; //默认排序从小到大 set > set2; //集合是从小到大 set > set3; //集合从大到小的输出; for(int i = 0; i < 5; i++){ set3.insert(11); set3.insert(45); set3.insert(99); set3.insert(77); set3.insert(66); } //从大到小的排序 set >::iterator it; for(it = set3.begin(); it != set3.end(); it++){ cout<<*it<<" "; } cout<
(3)、set中为复杂数据类型时的排序
代码如下:
#include #include #include using namespace std;class Student{ public: Student(const char *name, int age){ strcpy(this->name, name); this->age = age; } public: char name[32]; int age;};//仿函数:重载了(),struct FunStudent{ bool operator()(const Student &left, const Student &right){ if(left.age < right.age){ //左边的小,就返回为真!!从小到大进行排序 return true; }else{ return false; } }};int main(void){/* Student s1("s1", 31); Student s2("s2", 22); Student s3("s3", 55); Student s4("s4", 11); Student s5("s5", 31); //如果2个31岁,能插入成功吗? //如何知道插入的结果,看函数的返回值 set set1; //集合中插入的是学生类型(复杂数据类型),会调用这个仿函数 set1.insert(s1); set1.insert(s2); set1.insert(s3); set1.insert(s4); set1.insert(s5); set ::iterator it; for(it = set1.begin(); it != set1.end(); it++){ cout< age<<" "< name< set1; //集合中插入的是学生类型(复杂数据类型),会调用这个仿函数 pair ::iterator, bool> pair1 = set1.insert(s1); if(pair1.second == true){ //insert()的返回值是pair(对组)类型; cout<<"插入s1成功"< <<"插入s1失败"< ::iterator, bool> pair5 = set1.insert(s5); if(pair5.second == true){ cout<<"插入s1成功"< <<"插入s1失败"< ::iterator it; for(it = set1.begin(); it != set1.end(); it++){ cout< age<<" "< name<
(4)、set中迭代器的使用
代码如下:
#include #include #include using namespace std;//返回值为pair的类型要学会使用;int main(void){ set set1; for(int i = 0; i < 10; i++){ set1.insert(i+1); } set ::iterator it; for(it = set1.begin(); it != set1.end(); it++){ cout<<*it<<" "; } cout< ::iterator it0 = set1.find(5); cout<<"it0:"<<*it0< <<"num1:"< < ::iterator it1 = set1.lower_bound(5); //大于等于5的元素的迭代器的位置 cout<<"it1:"<<*it1<
::iterator, set
::iterator> mypair = set1.equal_range(5); //函数的返回值为对组 cout<<*mypair.first<
2、multiset的基本操作
代码如下:
#include #include using namespace std;int main(void){ multiset set1; int tmp = 0; cout<<"请输入multiset集合中的值:"; cin>>tmp; while(tmp != 0){ set1.insert(tmp); cout<<"请输入multiset集合中的值:"; cin>>tmp; } multiset ::iterator it; for(it = set1.begin(); it != set1.end(); it++){ cout<<*it<<" "; } cout< ::iterator it = set1.begin(); cout<<*it<<" "; set1.erase(it); } cout<
3、map的基本操作
(1)、map元素的添加、遍历、删除
代码如下:
#include #include #include
(2)、map中4种初始化的分析
代码如下:
#include #include
(3)、map查找
代码如下:
#include #include using namespace std;int main(void){ map map1; //因为map是key-value结构,所以可以做成pair(对组) //初始化map: //方法1、 map1.insert(pair (1, "teacher01")); map1.insert(pair (2, "teacher02")); //方法2、 map1.insert(make_pair(3, "teacher03")); map1.insert(make_pair(4, "teacher04")); //方法3、 map1.insert(map ::value_type(5, "teacher05")); map1.insert(map ::value_type(6, "teacher06")); //方法4、 map1[7] = "teacher07"; map1[8] = "teacher08"; //容器的遍历 map ::iterator it; for(it = map1.begin(); it != map1.end(); it++){ cout< first<<" "< second< ::iterator it2 = map1.find(2); if(it2 == map1.end()){ cout<<"key 100的值不存在"< < first<<"\t"< second< ::iterator, map ::iterator> mypair = map1.equal_range(5); //此时返回2个迭代器,形成一个pair(对组) //第一个迭代器,是>=5的位置 //第二个迭代器是 >5的位置 //使用第一个迭代器 if(mypair.first == map1.end()){ cout<<"第一个迭代器,是>=5的位置不存在"< < first<<"\t"< second< 5的位置不存在"< < first<<"\t"< second<
4、multimap的基本操作
代码如下:
#include #include #include using namespace std;//multimap的重要应用场景:数据分组;class Person{ public: string name; int age; string tel; double saly;};int main(void){ Person p1, p2, p3, p4, p5; p1.name = "王1"; p1.age = 31; p2.name = "王2"; p2.age = 32; p3.name = "张3"; p3.age = 33; p4.name = "张4"; p4.age = 34; p5.name = "赵5"; p5.age = 35; multimap map1; //sale部门 map1.insert(make_pair("sale", p1)); map1.insert(make_pair("sale", p2)); //development map1.insert(make_pair("development", p3)); map1.insert(make_pair("development", p4)); //financial map1.insert(make_pair("Financial", p5)); multimap ::iterator it; for(it = map1.begin(); it != map1.end(); it++){ //将age=32的人,名字更改为name32; if(it->second.age == 32){ it->second.name = "name32"; } cout< first<<"\t"< second.name< <<"遍历结束"< ::iterator it1 = map1.find("development"); int tag = 0; while(it1 != map1.end() && tag < num){ cout< first<<"\t"< second.name<