STL-set
// xuanze-sort.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<iostream>
#include<string>
#include<vector>//vector向量容器
#include<deque>
#include<list>
#include<set>
#include<algorithm>
using namespace std;
/*
================================================= set介绍= ========================================================
(1)set 集合实现了红黑树(red-black tree)的平衡二叉检索数的结构,在插入元素时,它会自动调整二叉树的排序,把该元素放到适当的位置,以确保每个
子树根结点的键值大于左子树的键值,而小于右子树的键值;
(2)另外,还得确保根节点左子树的高度与右子树的高度相等,这样,二叉树的高度最小,从而检索速度最快.
(3)不会重复插入相同键值的数据,对于重复的数据,会忽略处理
(4)平衡二叉检索树使用中序遍历算法,检索效率高于vector、deque、list等容器
(5)中序遍历算法可将键值由小到大遍历出来,所以,可以理解为平衡二叉检索数在插入元素时,就会自动将元素按照键值由小到大的顺序进行排序;
(6)对于set容器中的键值,不可直接去修改它,因为如果把容器中的一个键值修改了,set容器会根据新的键值旋转子树,以保持新的平衡,这样修改的键值可能就不在原先那个位置
上了。换句话说,构造set集合的主要目的就是为了快速检索。
*/
/******************************************************************/
int main(int argc, char* argv[])
{
/************************************** 1 ***************************************************/
/*1、创建list对象*/
set<int> s;
/*************************************** 2 **************************************************/
/* 2 插入元素*/
s.insert(8);
s.insert(18);
s.insert(28);
s.insert(0);
s.insert(2);
s.insert(10);
s.insert(134);
s.insert(0);//重复插入0,不会有变化
/****************************************** 3 ***********************************************/
/*3、 中序遍历*/
set<int>::iterator it;
cout<<"将set容器的数据进行中序遍历:";
for(it=s.begin();it!=s.end();it++)
cout<<*it<<" ";
cout<<endl;
//反向遍历
set<int>::reverse_iterator rit;
cout<<"将set容器的数据进行反向遍历:";
for(rit = s.rbegin();rit!=s.rend();rit++)
{
cout<<*rit<<" ";
}
cout<<endl;
/****************************************** 4 ***********************************************/
//删除的对象可以是某个迭代器位置上的元素、等于某个键值的元素、一个区间上的元素和清空集合
s.erase(8);//删除键值为8的数
//元素的检索
it =s.find(20);
if(it!=s.end())
cout<<"fount it!"<<endl;
else
cout<<"not fount it!"<<endl;
return 0;
}
//ABD##E##CF##G##