设为首页 加入收藏

TOP

set和multiset的内部结构(一)
2013-05-14 09:22:20 来源: 作者: 【 】 浏览:373
Tags:set multiset 内部 结构

   现在我们就从  set和multiset的内部结构来说明平衡二叉树来实现,先看代码:
    [cpp]
    #include <string>
    #include <set>
    #include <conio.h>
    #include<iostream>
    using namespace std;
    /*
    当元素放入容器中时,会按照一定的排序法则自动排序,默认是按照less<>排序规则来排序。这种自动排序的特性加速了元素查找的过程,但是也带来了一个问题,不可以直接修改set或multiset容器中的元素值,因为这样就可能违反了元素自动排序的规则。如果你希望修改一个元素的值,必须先删除原有的元素,再插入新的元素。
    一个集合(set)是一个容器,它其中的所包含的元素的值是唯一的。集合多集的区别是:set支持唯一的键值,set中的值都是特定的,而且只出现一次;而multiset中可以出现副本键,同一值可以出现多次。
    */
    //定义及初始化;没有返回值,或void
    void test0()
    {
    set<int> f;
    int myint[]={23,3,6,0};
    set<int>se(myint,myint+4);//初始化[beg,end)
    set<int>th(se.begin(),se.end());//初始化[beg,end),与上面雷同
    set<int>fo(se);//拷贝构造函数
    }
    //增加删除元素;返回值是void,除erase()的返回值是iterator外
    void test1()
    {   //insert:1.直接插入一个数据 2.在iterator位置上插入一个数据 3.插入[beg,end)一段数据
    set<int> myset;
    set<int>::iterator it;
    for (int i=0;i<5;i++)
    {
    myset.insert(i*10);//0 10 20 30 40
    }
    std::pair<set<int>::iterator,bool>ret=myset.insert(20);//20已经存在了,所以ret.second为false
    if (!ret.second)
    {
    it=ret.first;
    cout《*ret.first《endl;//20
    }
    myset.insert(it,24);
    int myint[]={5,10,15};
    myset.insert(myint,myint+3);//插入的是[beg,end);10已经存在了,没有插入
    for (it=myset.begin();it!=myset.end();it++)
    {
    cout《*it《" ";//0 5 10 15 20 24 30 40
    }
    cout《endl;
    //erase:1.删除一个数据 2.删除在iterator位置上的数据 3.删除在[beg,end)区间的数据
    myset.erase(24);//0 5 10 15 20 30 40
    it=myset.begin();//5 10 15 20 30 40
    myset.erase(it);
    it=myset.find(20);
    myset.erase(it,myset.end());//5 10 15
    for (it=myset.begin();it!=myset.end();it++)
    {
    cout《*it《" ";//5 10 15
    }
    myset.clear();//删除所有元素
    //set 的属性(通常是那些没有参数的函数):empty(),size()
    if (myset.empty())//判断集合是否为空
    {
    cout《"\nmyset is empty"《endl;
    }
    if (myset.size()==0)//判断集合是否为空
    {
    cout《"myset size is 0"《endl;
    }
    int myints[]={24,12,18,9};
    set<int>first(myints,myints+2),second(myints+1,myints+4);//初始化是:[beg,end)
    first.swap(second);
    for (it=first.begin();it!=first.end();it++)
    {
    cout《*it《" ";//9 12 18
    }
    cout《endl;
    for (it=second.begin();it!=second.end();it++)
    {
    cout《*it《" ";//12 24
    }
    cout《endl;
    }

   

首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇使用TCP协议实现文件传输 下一篇C/C++语言二维数组的传参方法

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: