关联容器set、map的使用

关联容器是STL容器的另一组成部分,关联容器的底层是红黑树,容器会根据值进行自动调整排序。

map与set的底层数据结构决定了他们不会有重复的元素,set.count()函数返回的结果只能整数 0 或 1,1表示有这个元素,0表示没有这个元素;

与其功能相似的还有函数find(),find()函数返回值是一个迭代器,成功返回迭代器指向所查找的元素,失败返回迭代器指向end

template<typename Container>
void Show(Container& con)
{
	Container::iterator it = con.begin();
	while (it != con.end())
	{
		std::cout << *it << " ";
		it++;
	}
	std::cout << std::endl;
}

int main()
{
	int arr1[] = { 5,6,78,36};
	int arr2[] = { 1, 32, 11, 543, 12, 9, 8, 234, 23 };
	int len1 = sizeof(arr1) / sizeof(arr1[0]);
	int len2 = sizeof(arr2) / sizeof(arr2[0]);
	
	std::set<int> myset(arr1, arr1 + len1); //插入arr1
	Show(myset);
	myset.insert(10); // 插入10
	Show(myset);
	myset.insert(arr2, arr2 + len2); // 插入arr2
	Show(myset);
	myset.erase(1);//删除1
	Show(myset);

	//set.find()函数的使用
	std::set<int>::iterator fit = std::find(myset.begin(), myset.end(), 10);
	std::set<int>::iterator fit1 = myset.find(23);//O(log2  n)
	std::cout << *fit << std::endl;
	std::cout << *fit1 << std::endl;
	 	
	//set.count()函数的使用
	int count = myset.count(11); //统计11
	std::cout << count << std::endl;
	myset.erase(11); //删除11后统计11
	count = myset.count(11);
	std::cout << count << std::endl;
	return 0;
}

讲完了set就轮到map了,map是一个键值对,每个键都有一个值与之相对应。

int main()
{
	std::map<int,int> mymap;
	std::cout << typeid(std::map<int, int>::value_type).name() << std::endl; //map参数的类型
	
	std::pair<int, int> p1(1, 11);
	mymap.insert(p1);
	mymap.insert(std::pair<int, int>(2, 22));
	mymap[3] = 33;
	std::map<int,int>::iterator it = mymap.begin();
	while (it != mymap.end())
	{
		std::cout << it->first << " ==> " << it->second << std::endl;
		it++;
	}
	std::map<int, int>::iterator fit = mymap.find(1);//基于key查询
	return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值