set,map相关操作

1、set的基本操作

成都创新互联公司专注为客户提供全方位的互联网综合服务,包含不限于网站建设、网站制作、左权网络推广、小程序开发、左权网络营销、左权企业策划、左权品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;成都创新互联公司为所有大学生创业者提供左权建站搭建服务,24小时服务热线:18982081108,官方网址:www.cdcxhl.com

(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成功"<::iterator, bool> pair5 = set1.insert(s5);
    if(pair5.second == true){
        cout<<"插入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<::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
using namespace std;

//map元素的添加、遍历、删除
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 it = map1.begin();
        cout<first<<" "<second<

(2)、map中4种初始化的分析

代码如下:

#include
#include
using namespace std;

//前三种初始化方法的返回值都为:pair(iterator, bool)
//插入四中方法的异同
//结论:前三种方法,若key已经存在,此时在进行插入,将会报错;
//方法4、若key已经存在,则修改;
int main(void){
    map map1;
    //方法1、
    pair::iterator, bool>  mypair1 = map1.insert(pair(1, "teacher01"));
    map1.insert(pair(2, "teacher02"));
    //方法2、
    pair::iterator, bool>  mypair3 = map1.insert(make_pair(3, "teacher03"));
    map1.insert(make_pair(4, "teacher04"));
    //方法3、
    pair::iterator, bool>  mypair5 = map1.insert(map::value_type(5, "tea
cher05"));
    if(mypair5.second != true){
        cout<<"key 5插入失败"<first<<" "<second<::iterator, bool>  mypair6 = map1.insert(map::value_type(5, "tea
cher06"));
    if(mypair6.second != true){
        cout<<"key 5插入失败"<first<<" "<second<::iterator it;
    for(it = map1.begin(); it != map1.end(); it++){
        cout<first<<"\t"<second<

(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<


当前标题:set,map相关操作
文章出自:http://hbruida.cn/article/ipeicp.html