SET的一些知识点

来源:互联网 发布:d3.js官网 编辑:程序博客网 时间:2024/06/15 00:55

这两天学习了STL,准备找几道题练练手,在这个过程中,总结了一些小的知识点。

1、set集合容器实现了红黑树的二叉检索树的数据结构,在插入元素时,它会自动调整二叉树的排列,把该元素放到适当的位置,以确保每个子树根节点的键值大于左子树所有节点的键值,而小于右子树所有节点的键值。

2、平衡二叉检索树的检索使用中序遍历算法,检索效率高于vector、deque、list容器。将键值由小到大遍历出来,并且不会重复插入相同键值的元素,采取忽略处理。如果是一个结构体其中有三个int型元素a,b,c,如果有插入的a相同,则这组数据被忽略,如插入1  2  3、1  2  4、1   3  4;则只会插入1 2 3,因为首元素相同,所以采取忽略处理。而除首元素其他元素相同则可以插入。

3、iterator迭代器的作用是遍历容器。

4、在5下面有以下知识点的练习。

      创建元素:set<int>s,需要说明元素的类型;

      元素的插入:s.insert(需要插入的元素),如:s.insert(8),插入元素8;

      中序遍历:set<int> :: iterator  it;

                         for( it=s.begin() ; it !=s.end();it++)

                        {

                              cout<<*it<<"  ";

                        }

       反向遍历:set<int> :: reverse_iterator it;

                           for( it=s.rbegin() ; it !=s.rend();it++)

                        {

                              cout<<*it<<"  ";

                        }

      元素的删除:s.erase(6); 删除键值为6的元素;

      元素的查找:set<int>::iterator  it;

                             it=s.find(6);

                            if (it != s.end() )

                                 cout<<“找到该元素”;

5、自定义比较元素:

          1>  不是结构体的元素、按键值由大到小:

#include<set>#include<iostream>using namespace std;//自定义比较函数mycomp,重载"()"操作符struct mycomp{        bool operator ()(const int &a,const int &b)        {                   return a>b;        }};int main(){        //定义元素类型为int型的集合对象s,当前没有任何元素        //采用的比较函数是mycomp        set<int,mycomp>s;        //插入5个元素,由于8有重复,所以第二次的8并没有执行        s.insert(8);        s.insert(1);        s.insert(12);        s.insert(6);        s.insert(8);//第二次插入8,重复元素,不会插入        set<int,mycomp>::iterator it;        for(it=s.begin();it!=s.end();it++)          cout<<*it<<" ";        cout<<endl;        return 0;}

运行结果:

    12  8  6  1

       

2>如果元素是结构体,那么直接可以把比较函数写在结构体内。下面的程序说明了如何操作:

#include<set>#include<iostream>using namespace std;struct INFO{        string name;        float score;        bool operator < (const INFO &a) const        {                return a.score<score;        }};int main(){        //定义元素类型为INFO结构体的集合对象s,当前没有任何元素        set<INFO>s;        INFO info;        info.name="Jack";        info.score=80.5;        s.insert(info);        info.name="Tomi";        info.score=20.5;        s.insert(info);        info.name="Nacy";        info.score=60.5;        s.insert(info);        set<INFO>::iterator it;        for(it=s.begin();it!=s.end();it++)        {                cout<<(*it).name<<":"<<(*it).score<<endl;        }        return 0;}

运行结果:

Jack:80.5

Nacy:60.5

Tomi:20.5

 


 


   

0 0
原创粉丝点击