zoukankan      html  css  js  c++  java
  • STL set 用法

     
    c++ stl集合set介绍 c++ stl集合(Set)是一种包含已排序对象的关联容器。set/multiset会根据待定的排序准则,自动将元素排序。两者不同在于前者不允许元素重复,而后者允许。1) 不能直接改变元素值,因为那样会打乱原...

    c++ stl集合set介绍

       c++ stl集合(Set)是一种包含已排序对象的关联容器。set/multiset会根据待定的排序准则,自动将元素排序。两者不同在于前者不允许元素重复,而后者允许。

    1) 不能直接改变元素值,因为那样会打乱原本正确的顺序,要改变元素值必须先删除旧元素,则插入新元素

    2) 不提供直接存取元素的任何操作函数,只能通过迭代器进行间接存取,而且从迭代器角度来看,元素值是常数

    3) 元素比较动作只能用于型别相同的容器(即元素和排序准则必须相同)

    set模板原型://Key为元素(键值)类型

    1
    template <class Key, class Compare=less<Key>, class Alloc=STL_DEFAULT_ALLOCATOR(Key) >

    从原型可以看出,可以看出比较函数对象及内存分配器采用的是默认参数,因此如果未指定,它们将采用系统默认方式。

    set的各成员函数列表如下:

    c++ stl容器set成员函数:begin()--返回指向第一个元素的迭代器

    c++ stl容器set成员函数:clear()--清除所有元素

    c++ stl容器set成员函数:count()--返回某个值元素的个数

    c++ stl容器set成员函数:empty()--如果集合为空,返回true

    c++ stl容器set成员函数:end()--返回指向最后一个元素的迭代器

    c++ stl容器set成员函数:equal_range()--返回集合中与给定值相等的上下限的两个迭代器

    c++ stl容器set成员函数:erase()--删除集合中的元素

    c++ stl容器set成员函数:find()--返回一个指向被查找到元素的迭代器

    c++ stl容器set成员函数:get_allocator()--返回集合的分配器

    c++ stl容器set成员函数:insert()--在集合中插入元素

    c++ stl容器set成员函数:lower_bound()--返回指向大于(或等于)某值的第一个元素的迭代器

    c++ stl容器set成员函数:key_comp()--返回一个用于元素间值比较的函数

    c++ stl容器set成员函数:max_size()--返回集合能容纳的元素的最大限值

    c++ stl容器set成员函数:rbegin()--返回指向集合中最后一个元素的反向迭代器

    c++ stl容器set成员函数:rend()--返回指向集合中第一个元素的反向迭代器

    c++ stl容器set成员函数:size()--集合中元素的数目

    c++ stl容器set成员函数:swap()--交换两个集合变量

    c++ stl容器set成员函数:upper_bound()--返回大于某个值元素的迭代器

    c++ stl容器set成员函数:value_comp()--返回一个用于比较元素间的值的函数

    std::set_intersection() :这个函数是求两个集合的交集。
    std::set_union() :求两个集合的并集
    std::set_difference():差集
    std::set_symmetric_difference():得到的结果是 第一个迭代器相对于第二个的差集 并上第二个相对于第一个的差集

    c++ stl集合set插入,遍历用法举例

    #include<iostream> 
    #include<set> 
    using namespace std; 
    //set插入元素操作  
    int main() 
        //定义一个int型集合对象s,当前没有任何元素.由www.169it.com搜集整理
        set<int> s; 
        s.insert(8);  //第一次插入8,可以插入  
        s.insert(1); 
        s.insert(12); 
        s.insert(6); 
        s.insert(8);   //第二次插入8,重复元素,不会插入  
        set<int>::iterator it; //定义前向迭代器 
        //中序遍历集合中的所有元素  
        for(it=s.begin();it!=s.end();it++) 
        cout<<*it<<endl;    
        system("pause"); 
        return 0; 
    }
     
     

    #include<bits/stdc++.h>
    #include<set>
    using namespace std;
    set<int> b,a,c;
    set<int>::iterator it;
    void jian(set<int> &a,set<int> &b)
    {
    set<int> c;
    set_intersection(a.begin(),a.end(),b.begin(),b.end(),
    insert_iterator<set<int> >(c,c.begin()));
    for(it=c.begin();it!=c.end();it++)
    {
    a.erase(*it); 
    }
    }
    int main()
    {
    for(int i=1;i<=50;i++)
    {
    if(i%2==0)
    b.insert(i);
    if(i%3==0)
    a.insert(i);
    }
    printf("a=");
    for(it=a.begin();it!=a.end();it++)
    {
    printf("%d ",*it);
    }
    printf(" b=");
    for(it=b.begin();it!=b.end();it++)
    {
    printf("%d ",*it);
    }
    set_intersection(a.begin(),a.end(),b.begin(),b.end(),insert_iterator<set<int> >(c,c.begin()));
    printf(" c=");
    for(it=c.begin();it!=c.end();it++)
    {
    printf("%d ",*it);
    }
    jian(a,b);
    printf(" a-=");
    for(it=a.begin();it!=a.end();it++)
    {
    printf("%d ",*it);
    }
    return 0;
    }

  • 相关阅读:
    Java中Io类-File类的构造方法
    hadoop的wordcount例子运行
    关于“javax.servlet.include.request_uri”属性值
    如何高效地分析框架源码
    代码重构的技巧——合理使用@Deprecated
    spring的事件机制
    在eclipse中使用jetty插件替代m2e开发调试maven web项目
    maven多配目配置总结
    如何禁止anonymous用户访问nexus
    efront二次开发记要
  • 原文地址:https://www.cnblogs.com/yangyaojia/p/5930043.html
Copyright © 2011-2022 走看看