C++ set用法(带例程)

介绍:

        set集合容器实现了红黑树(Red-Black Tree)的平衡二叉检索树的的数据结构,在插入元素时,它会自动调整二叉树的排列,把该元素放到适当的位置,以确保每个子树根节点的键值大于左子树所有节点的键值,而小于右子树所有节点的键值;另外,还得确保根节点的左子树的高度与有字数的高度相等,这样,二叉树的高度最小,从而检索速度最快。要注意的是,它不会重复插入相同键值的元素,而采取忽略处理。
        平衡二叉检索树的检索使用中序遍历算法,检索效率高于vector、deque、和list的容器。另外,采用中序遍历算法可将键值由小到大遍历出来,所以,可以理解为平衡二叉检索树在插入元素时,就会自动将元素按键值从小到大的顺序排列。
        Set容器和其他容器差不多,无非就是相同的值不存,存进去自动排序好了。
        构造set集合的主要目的是为了快速检索

使用:

1、头文件

#include <set>

2、初始化

set<int> st;        //声明一个int型set
set<int> st(tmp);   //声明并用tmpset初始化vecset
set<int> tmp(st.begin(), st.begin() + 3);  //用st set的第0个到第2个值初始化tmp
int arr[5] = {1, 2, 3, 4, 5};   
set<int> st(arr, arr + 5);      //将arr数组的元素用于初始化vec向量
//说明:当然不包括arr[4]元素,末尾指针都是指结束元素的下一个元素,
//这个主要是为了和st.end()指针统一。
set<int> st(&arr[1], &arr[4]); //将arr[1]~arr[4]范围内的元素作为vec的初始值

3、基本操作

(1). 容量
大小:st.size();
最大容量: st.max_size();
判空: st.empty();
(2). 修改
插入元素: st.insert();
删除元素: st.erase();

清空元素: st.clear();

(3)迭代器

set<int>::iterator it;

开始指针:st.begin();

末尾指针:st.end(); //指向最后一个元素的下一个位置

反向迭代器

set<int>::reverse_iterator rit;

st.rbegin()、st.rend()

(5)查找

st.sfind(info);

4、例程

#include "stdafx.h"
#include <set>
#include <algorithm>


int main(int argc, char* argv[])
{
std::set<int> st;        //声明一个int型set
int i;


printf("st.size() = %d\r\n", st.size());
printf("st.max_size() = %d\r\n", st.max_size());
printf("st.empty() = %d\r\n", st.empty());


st.insert(2);
st.insert(2);
st.insert(4);
st.insert(1);
st.insert(5);
st.insert(6);
st.insert(3);


std::set<int>::iterator it = st.begin();

printf("insert loop printf:\r\n");
for(; it != st.end(); it++)
{
printf("value = %d \r\n", *it);
}


it = st.begin();
it ++;
st.erase(it);
it = st.begin();
printf("erase loop printf:\r\n");
for(; it != st.end(); it++)
{
printf("value = %d \r\n", *it);
}


st.erase(6);
it = st.begin();
printf("erase loop printf:\r\n");
for(; it != st.end(); it++)
{
printf("value = %d \r\n", *it);
}


it = st.find(5);
if(it != st.end())
{
printf("find 5 succ \r\n");
}
else
{
printf("find 5 fail\r\n");
}


it = st.find(6);
if(it != st.end())
{
printf("find 6 succ \r\n");
}
else
{
printf("find 6 fail\r\n");
}


return 0;
}

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值