网站建设服务的广告,网站排名下降原因,网站美工做图,京东的电子商务网站建设set、unordered_set、multiset是什么#xff1f;以及它们之间的区别
首先#xff0c;它们三个都是C标准库提供的关联容器中的一种。只不过set、multiset容器是有序的#xff0c;而unordered_set容器是无序的 std::set 是 C 标准库中的一个容器#xff0c;其存储的元素按设…set、unordered_set、multiset是什么以及它们之间的区别
首先它们三个都是C标准库提供的关联容器中的一种。只不过set、multiset容器是有序的而unordered_set容器是无序的 std::set 是 C 标准库中的一个容器其存储的元素按设定的顺序排列。它使用平衡二叉树实现允许通过元素值直接访问元素。它还提供 log(n) 的快速搜索时间。 std::unordered_set 是一个关联容器其存储的元素没有特定的顺序可以通过元素的值来访问。它使用散列表实现提供更好的访问性能。 std::multiset 与 std::set 类似但是它允许重复。它不会尝试保持自己的数据排序而是依赖哈希表决定具体元素所在的位置。
使用set
C中的Sets可以用作实施与算法相关的问题的有效工具。 它们有助于搜索排序删除和插入元素等活动。 这包括通过另一个值替换现有值查找最小或最大元素等任务。
由于其平衡的树结构集合结构的时间复杂度总是至少为O(log n)因此在处理频繁更新的数据集时这将是最佳选择。
使用unordered_set
C中的无序sets利用哈希表结构存储和组织元素。 它不保证排序但仍可以使用集合中的某些操作例如插入和删除元素以常量时间搜索元素以及查找两个元素是否相等。
使用无序集时由于不能保证存储元素的排序无法使用与sets相关的任何需要排序的操作。
在做leetcode上面的算法题时如果不需要维持元素中的顺序使用unordered_set这种数据结构比set这种数据结构耗时要少。
使用multiset
Multisets是允许存储重复元素的容器。 当解决元素出现频率很重要的问题时可以使用它例如频率分析。 在许多情况下它可以提供额外的功能; 例如添加节点的发生率并更新发生率。
通常可以使用来自set和unordered_set的所有操作以及特定的multiset操作例如以其关联频率删除元素的能力。
set、unordered、multiset之间的通用操作。
因为他们都是属于C中的关联容器所以说他们都可以执行一些同样的操作且函数名也是一样的。
插入操作 c.insert(v) // 插入一个元素v是对应容器类型的一个元素。 c.insert(b,e) // b和e是一对迭代器表示一个范围将这个范围内的所有元素添加到容器中。区间是左闭右开 c.insert(il) // 其中il是一个列表将列表中的元素全部都添加进容器中如果是不允许重复的容器则只添加没有添加过的元素。 删除操作 c.erase(k) // 从c中删除每个关键字为k的元素。返回一个size_type值指出删除元素的数量。 访问操作 c.find(k); // 返回一个迭代器指向第一个关键字为k的元素若k不在容器中则返回尾后迭代器。 c.count(k); //返回关键字等于k的元素的数量。对于不允许重复关键字的容器返回值永远是0或1。 在不需要计数的情况查找一个元素最好是用find()如果还需要统计元素的数量这个时候再去考虑用count()