set和map容器

set和map都是用二叉搜索树来维护的容器:

因此能高效的完成如下操作且时间复杂度均为O(logn)

  • 插入一个数值
  • 查询是否包含某个数值
  • 删除某个数值

不同的是:

  • set是维护值的容器
  • map是维护键和键对应值的容器

1.set相关操作

  1. 头文件:
#include<set>
  1. 声明、插入、删除:
    //声明
    set<int> s;
    //插入元素
    s.insert(3);
    //删除元素
    s.erase(3);
  1. 遍历元素:
    //声明迭代器
	set<int>::iterator ite;
	//遍历元素,这里的结果为由小到大的排序数列
	for (ite = s.begin(); ite != s.end(); ite++)
	    cout << *ite;
  1. 查找元素的两种方法:
    //声明迭代器
	set<int>::iterator ite;
	
    //方法一
	ite = s.find(1);
	if (ite == s.end()) puts("not found\n");
	else puts("found\n");
	
    //方法二
	if (s.count(3) != 0) puts("found\n");
	else puts("not found\n"); 

2.map相关操作

  1. 头文件
#include<map>
  1. 声明、插入、删除:
    //声明
	map<int, const char*>m;
	//插入
	m.insert(make_pair(1, "one"));
	m.insert(make_pair(2, "two"));
	m[3] = "three";                 //其他写法
	//删除
	m.erase(1);
  1. 遍历元素
    //声明迭代器
    map<int, const char*>::iterator ite2;
    //遍历元素
    for (ite2 = m.begin(); ite2 != m.end(); ite2++)
		cout << ite2->first << ite2->second;
  1. 查找元素的两种写法
    //方法1
	ite2 = m.find(1);
	if (ite2 == m.end()) puts("not found");
	else  puts(ite2->second);               //输出one 
                                            //puts(ite2->second)可用puts(m[1])代替
                                            //注意m[i]中的i必须在容器中存在
    //方法2
	if (m.count(3) != 0) puts(m[3]);
	else puts("not found\n");

注:

我们都知道二叉搜索树会有退化的情况,但编程语言标准中的二叉搜索树很好地实现了平衡二叉树,因此避免了退化情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值