网站 被降权,网站编写费用,平台网站开发公司组织架构,可以在线做试卷的网站#x1f308; 个人主页#xff1a;白子寰 #x1f525; 分类专栏#xff1a;重生之我在学Linux#xff0c;C打怪之路#xff0c;python从入门到精通#xff0c;数据结构#xff0c;C语言#xff0c;C语言题集#x1f448; 希望得到您的订阅和支持~ #x1f4a1; 坚持… 个人主页白子寰 分类专栏重生之我在学LinuxC打怪之路python从入门到精通数据结构C语言C语言题集 希望得到您的订阅和支持~ 坚持创作博文(平均质量分82)分享更多关于深度学习、C/Cpython领域的优质内容希望得到您的关注~ 序列式容器和关联式容器 序列容器如string、vector等存储线性数据元素按存储顺序访问。 关联容器如map、set基于红黑树实现提供基于关键字的存储和访问 其中set存储唯一关键字(对应key模型)map存储键值对(对应key/value模型) set系列的使用
set和multiset参考文档 set - C Reference set类的介绍 set声明采用类型T需支持小于比较或自定义比较函数。 底层使用红黑树存储内存由空间配置器管理可选自定义。 通常无需指定后两个模板参数。 set操作效率为O(log n)迭代器按中序遍历提供有序访问。 set的使用
insert 范围for 迭代器 find查找区别 count lower_bound upper_bound multiset multiset和set的差异 在C中set和multiset都是关联容器用于存储已排序的数据集合。 它们的主要区别在于它们对键值或元素的重复性的处理方式 set set容器中不允许有重复的元素。每个元素都是唯一的。 当尝试插入一个已经在set中存在的元素时插入操作将失败并且容器保持不变。 set通常实现为一个红黑树这意味着在set中查找、插入和删除操作的时间复杂度通常是O(log n) multiset multiset容器允许存储重复的元素。 在multiset中可以插入相同的元素多次每个元素都会被独立存储。 与set一样multiset也是基于红黑树实现的因此它也提供了对元素的排序并且查找、插入和删除操作的时间复杂度通常是O(log n) 查找操作 在set中由于元素唯一find操作会返回指向找到元素的迭代器或者如果没有找到则返回end()迭代器。 在multiset中find操作同样可以用来查找元素但由于可能有多个相同的元素它只保证返回一个匹配元素的迭代 删除操作 在set中erase操作会删除指定的元素如果存在并且由于元素唯一只会删除一个匹配的元素。 在multiset中erase操作可以删除所有匹配的元素或者只删除一个特定的实例 选择使用set还是multiset取决于你的具体需求 如果你需要确保元素的唯一性应该使用set 如果你需要存储多个相同的元素并保持它们的排序则应该使用multiset map系列的使用
map和multiset参考文档 map - C Reference map类的介绍 C中的map类是一种关联容器它存储键值对其中键是唯一的而值则可以是重复的。map类属于STL标准模板库的一部分它按照键的升序自动排序。 以下是map类的一些基本特性和用法 特性 键的唯一性在map中每个键都是唯一的不能有重复的键。自动排序map根据键的值自动排序默认是升序。键值对存储map存储键值对可以通过键快速访问对应的值。红黑树实现map通常是基于红黑树实现的这意味着插入和查找操作的时间复杂度为O(log n) map的使用
map的四种插入方式、迭代器的使用及范围for
void Test1()
{mapstring, string dict;// 一、pairstring, string kv1 {left, 左边};dict.insert(kv1);// 二、dict.insert(pairstring, string(right, 右边));// 三、dict.insert(make_pairstring, string(up, 上边));// 四、dict.insert({ down,下边 });// 五、mapstring, string dict1 { {left, 左边},{right, 右边},{up, 上边},{down,下边} };// 迭代器mapstring, string::iterator it dict.begin();while (it ! dict.end()){cout (*it).first : (*it).second endl;it;}cout endl;// 范围for①for (auto e : dict1){cout e.first : e.second endl;}cout endl;// 范围for②for (auto [x, y] : dict1){cout x : y endl;}
} map简单字典的实现
int main()
{mapstring, string dict { { left,左边 }, { right,右边 }, { up,上边 }, { down,下边 } };string str;while (cin str){auto ret dict.find(str);if (ret ! dict.end()){cout -- ret-second endl;}else{cout 查无此单词 endl;}}return 0;
} CTRL Z 退出 使用map对于水果(牛奶)的计数
int main()
{string arr[] { 苹果,香蕉,牛奶,苹果,香蕉,苹果,牛奶 };mapstring, int CountFruit;for (auto str : arr){auto ret CountFruit.find(str);if (ret CountFruit.end()){CountFruit.insert({ str,1 });}else{ret-second;}}for (auto e : CountFruit){cout e.first : e.second endl;}return 0;
} multimap和map的差异 multimap和map在C中都是关联容器用于存储键值对但它们之间有几个关键差异 唯一性 map在map中每个键必须是唯一的。如果你尝试插入一个具有相同键的元素它将替换掉具有相同键的现有元素。multimap与map不同multimap允许键重复。因此你可以有多个具有相同键的元素。 实现方式 map通常是基于红黑树实现的这使得元素按照键的升序排列并保证查找、插入和删除操作的时间复杂度为O(log n)。multimap同样基于红黑树实现但由于允许多个相同键的存在其行为略有不同。 操作 插入 对于map插入操作会检查键是否已存在如果存在则替换旧值。 对于multimap插入操作不会检查键的唯一性因此可以插入多个相同键的元素。查找 在map中你可以使用find()函数查找特定的键并且最多只能找到一个匹配项。 在multimap中find()函数将返回第一个匹配的键值对但你可能需要使用equal_range()函数来找到所有具有相同键的元素。删除 在map中使用erase()函数可以删除具有特定键的单个元素。 在multimap中erase()函数可以删除具有特定键的所有元素或者你可以指定一个迭代器来删除单个元素。 总结 选择map还是multimap取决于你的具体需求。 如果你需要每个键对应唯一的值那么应该使用map。 如果你需要存储具有相同键的多个值那么应该使用multimap。 **********************************************************分割线*****************************************************************************完结 感谢浏览和阅读。 等等等等一下分享最近喜欢的一句话: “万年太久只争朝夕”。 我是白子寰如果你喜欢我的作品不妨你留个点赞关注让我知道你曾来过。你的点赞和关注是我持续写作的动力 好了划走吧。