关联式容器(Associative Container)

1:什么是关联式容器?
关联式容器依照特定的排序准则 自动为元素排序 元素可以是任何类型的value 也可以是
key/value pair key可以是任何类型 映射至一个相关value 而value也可以是任意类型
通常是所有容器默认以<进行比较 也可以通过自己的比较函数 定义出不同的排序准则
2:关联式容器的特点
其底层是由二叉树实现 每个节点都有一个父节点和两个子节点 左节点所有元素都比自己小,右节点的所有元素都比自己大。
注意:关联式容器的主要差别在于元素的种类以及处理重复元素的方法
寻找某一个特定的value的时间复杂度是对数 例如查找1000中的特定数字 你平均需要找10次 而不是 500次
缺点: 不能改动元素的value 会破坏元素的自动排序

Set元素根据其value进行排序 每个元素只能出现一次 不允许重复
Multiset和Set的唯一区别是元素可以重复 可以包含多个value相同的元素
Map每个元素都是key/value pair 其中key是排序准则的基准 每个key只能出现一次 不许重复 可以视为索引为任意类型的数组
Multimap和Map的唯一区别是可以存在多个key值相同的元素 因此Multimap可以被当作字典使用

可以将set视为特殊的map 元素的value等同于key 这些容器都是由二叉树实现
set和multiset使用实例

#include<set>
#include<string>
#include<iostream>

using namespace std;

int main()
{
	multiset<string> cities{
		"shanghai","chongqi","dongbie","liaoning","chengdu","zhenzhou"
	};
	for (const auto& elem : cities)
	{
		cout << elem << " ";
	}
	cout << endl;

	cities.insert({ "shanghai","chongqi","dongbie" });

	for (const auto& elem : cities)
	{
		cout << elem << " ";
	}
	cout << endl;

	return 0;
}

在这里插入图片描述

map和multimap使用实例

#include<map>
#include<string>
#include<iostream>

using namespace std;

int main()
{
	multimap<int, string> coll;

	coll = {
		{1,"HELLO"},
		{2,"WORLD"},
		{3,"lucky"},
		{4,"come"},
		{5,"My"},
		{6,"lover"}
	};

	//取出的elem是pair类型 取second
	for (auto elem : coll)
	{
		cout << elem.second << " ";
	}
	cout << endl;
	return 0;
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STL(Standard Template Library)是C++标准库的一部分,它提供了一系列高效、灵活的数据结构和算法,用于处理动态数据。在STL中,常见的容器主要包括以下几种: 1. **序列容器**(Sequence Containers): - `std::vector`:动态数组,支持随机访问。 - `std::deque`:双端队列,可以在两端进行高效的插入和删除操作。 - `std::list`:双向链表,元素按插入顺序排列,但查找效率较低。 - `std::forward_list`:单向链表,类似于`list`,但不支持在任意位置插入或删除。 - `std::array`:固定大小的数组,类似C语言中的数组。 2. **关联容器**(Associative Containers): - `std::map`(或`std::unordered_map`):关联键值对,使用哈希表实现高效查找。 - `std::set`(或`std::unordered_set`):无序的键集合,不允许重复。 - `std::multiset`:有序的键集合,允许重复。 - `std::multimap`:关联键值对的多值集合,允许多个键对应同一值。 3. **堆容器**(Priority Container): - `std::priority_queue`:堆数据结构,常用于实现优先级队列。 4. **集合容器**(Set-like Containers): - `std::set`:无序集合,使用哈希表实现。 - `std::unordered_set`:无序且无重复的集合。 5. **容器适配器**(Container Adapters): - `std::stack`:栈,基于`vector`或`deque`实现。 - `std::queue`:队列,同样基于`vector`或`deque`实现。 - `std::bitset`:位集,表示一系列二进制位。 STL迭代器是一种抽象概念,它是容器算法之间通用的接口,使得我们能够遍历容器中的元素,而不必关心底层的具体实现细节。迭代器提供了读取和修改容器元素的方法,可以指向容器的开始、结束和中间位置。无论是序列还是关联容器,都有相应的迭代器类型,如`iterator`和`const_iterator`等,分别用于读写操作。迭代器的生命周期管理也非常重要,确保它们不会超出容器的有效范围。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值