zoukankan      html  css  js  c++  java
  • Set集合容器

    1、set集合容器创建set集合对象

    //创建set对象时 要指定元素类型 元素排列按默认比较规则 比较规则可以自己定义
    #include<iostream>
    #include<string.h>
    #include<stdio.h>
    #include<ctype.h>
    #include<algorithm>
    #include<stack>
    #include<queue>
    #include<set>
    #include<math.h>
    #include<vector>
    using namespace std;
    int main()
    {
    	set<int>s;
    	return 0;
    }
    


    2、set集合容器元素的插入与中序遍历

    //使用insert()方法 插入的具体规则在默认比较规则下 是按元素值由大到小插入的 比较规则可自己定义
    //set(集合)——包含了经过排序了的数据,这些数据的值(value)必须是唯一的。
    #include<iostream>
    #include<string.h>
    #include<stdio.h>
    #include<ctype.h>
    #include<algorithm>
    #include<stack>
    #include<queue>
    #include<set>
    #include<math.h>
    #include<vector>
    using namespace std;
    int main()
    {
        set<int> s;
        int n;
        int m;
        while(scanf("%d",&n)!=EOF)
        {
            for(int i=0; i<n; i++)
            {
                scanf("%d",&m);
                s.insert(m);
            }
            set<int>::iterator p;
            for(p=s.begin(); p!=s.end(); p++)
            {
                cout<<*p<<" ";
            }
        }
        return 0;
    }
    


     

    3、set集合容器元素的反向遍历

    //使用反向迭代器reverse_iterator可以反向遍历集合,输出反向排序结果 需要用到rbegin()和rend() 分别给出反向遍历的开始位置和结束位置
    
    #include<iostream>
    #include<string.h>
    #include<stdio.h>
    #include<ctype.h>
    #include<algorithm>
    #include<stack>
    #include<queue>
    #include<set>
    #include<math.h>
    #include<vector>
    using namespace std;
    int main()
    {
        set<int> s;
        s.insert(12);
        s.insert(6);
        s.insert(8);
        s.insert(1);
        s.insert(8);
        set<int>::reverse_iterator p;
        for(p=s.rbegin(); p!=s.rend(); p++)
        {
            cout<<*p<<" ";
        }
        return 0;
    }
    


     

    4、set集合容器元素的删除

    //集合具高效删除功能 并自动重新调整内部的红黑树的平衡 删除的对象可以是迭代器位置上的元素 或者是某键值的元素 一个区间 清空集合
    #include<iostream>
    #include<string.h>
    #include<stdio.h>
    #include<ctype.h>
    #include<algorithm>
    #include<stack>
    #include<queue>
    #include<set>
    #include<math.h>
    #include<vector>
    using namespace std;
    int main()
    {
        set<int> s;
        s.insert(12);
        s.insert(6);
        s.insert(8);
        s.insert(1);
        s.insert(8);
        set<int>::reverse_iterator rit;
        for(rit=s.rbegin(); rit!=s.rend(); rit++)
        {
            cout<<*rit<<" ";
        }
        cout<<endl;
        s.erase(6);
        for(rit=s.rbegin(); rit!=s.rend(); rit++)
        {
            cout<<*rit<<" ";
        }
        cout<<endl;
        s.erase(s.begin());
        for(rit=s.rbegin(); rit!=s.rend(); rit++)
        {
            cout<<*rit<<" ";
        }
        cout<<endl;
        s.clear();
        cout<<s.size()<<endl;
        return 0;
    }
    


     

    5、set集合容器元素的检索

    //使用find()对集合进行搜索 如找到查找的键值 返回其迭代器位置 否则 返回集合的end()
    #include<iostream>
    #include<string.h>
    #include<stdio.h>
    #include<ctype.h>
    #include<algorithm>
    #include<stack>
    #include<queue>
    #include<set>
    #include<math.h>
    #include<vector>
    using namespace std;
    int main()
    {
        set<int> s;
        s.insert(12);
        s.insert(6);
        s.insert(8);
        s.insert(1);
        s.insert(8);
        set<int>::iterator it;
        it=s.find(6);
        if(it!=s.end())
            cout<<*it<<endl;
        else cout<<"not find it!"<<endl;
        it=s.find(20);
        if(it!=s.end())
            cout<<*it<<endl;
        else cout<<"not find it!"<<endl;
        return 0;
    }
    


     

    6、set集合容器自定义比较函数

    //如果元素不是结构体
    #include<iostream>
    #include<string.h>
    #include<stdio.h>
    #include<ctype.h>
    #include<algorithm>
    #include<stack>
    #include<queue>
    #include<set>
    #include<math.h>
    #include<vector>
    using namespace std;
    struct N
    {
        bool operator()(int m,int n)
        {
            return m>n;
        }
    };
    int main()
    {
    	int n;
    	int m;
    	set<int,N>s;
    	while(scanf("%d",&n)!=EOF)
    	{
    	    for(int i=0;i<n;i++)
    	    {
    	        scanf("%d",&m);
    	        s.insert(m);
    	    }
    	    set<int,N>::iterator p;
    	    for(p=s.begin();p!=s.end();p++)
    	    cout<<*p<<" ";
    	    cout<<endl;
    	}
    	return 0;
    }
    
    //如果元素是结构体
    #include<iostream>
    #include<string.h>
    #include<stdio.h>
    #include<ctype.h>
    #include<algorithm>
    #include<stack>
    #include<queue>
    #include<set>
    #include<math.h>
    #include<vector>
    using namespace std;
    struct N
    {
        string name;
        double grade;
        bool operator<(const N&a)const
        {
            return grade>a.grade;
        }
    };
    int main()
    {
        int n;
        set<N>s;
        int m;
        N a;
        while(scanf("%d",&n)!=EOF)
        {
            for(int i=0; i<n; i++)
            {
                cin>>a.name>>a.grade;
                s.insert(a);
            }
            set<N>::iterator p;
            for(p=s.begin(); p!=s.end(); p++)
                cout<<(*p).name<<" "<<(*p).grade<<endl;
        }
        return 0;
    }
    



     

  • 相关阅读:
    Angular路由参数传递
    关于wx.redirectTo、wx.navigateTo失效问题
    深入浅出UE4网络
    UE4中Bebavior Tree中Delay及其后面代码失效的原因
    UE4中Component和Subobject的区别
    寻路优化(二)——二维地图上theta*算法的设计探索
    寻路优化(一)——二维地图上A*启发函数的设计探索
    UE4的AI学习(2)——官方案例实例分析
    UE4的AI学习(1)——基本概念
    不同机器下,游戏编程如何保证物体移动具有相同的速度
  • 原文地址:https://www.cnblogs.com/bbsno1/p/3258045.html
Copyright © 2011-2022 走看看