STL --- 二、容器 (4)set 和multiset

这篇具有很好参考价值的文章主要介绍了STL --- 二、容器 (4)set 和multiset。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1、std::set 和 std::multiset 特点

2、std::set 和 std::multiset 常用的api

3、std::set 和 std::multiset 的示例

4、std::map和set区别


1、std::set 和 std::multiset 特点

(1)std::set 中每个元素的键值都唯一,而 std::multiset 中可以有多个相同的键值。
(2)std::set 中的元素按照键值大小顺序是按照元素的值从小到大排列的。如果需要按照其他方式排序,可以使用自定义比较函数来实现。

(3)std::set 和 std::multiset 都提供了基本的插入、查找、删除等操作,以及迭代器遍历等功能。它们底层实现使用红黑树,因此插入、查找、删除等操作的时间复杂度都是 O(log n)。

(4)std::set 和 std::multiset 的使用方式类似,可以通过迭代器遍历来访问容器中的元素。

因此,std::set 适合用于需要快速查找、去重的场景,而 std::multiset 适合用于需要保存多个相同键值的场景。

2、std::set 和 std::multiset 常用的api

1. insert(value):将一个值插入到set或multiset中。
2. erase(position):删除set或multiset中指定位置的元素。
3. erase(value):删除set或multiset中所有等于指定值的元素。
4. find(value):查找set或multiset中是否存在等于指定值的元素,如果存在返回该元素的迭代器,否则返回end()。
5. count(value):返回set或multiset中等于指定值的元素个数。
6. size():返回set或multiset中元素的个数。
7. empty():判断set或multiset是否为空。
8. clear():清空set或multiset中的所有元素。
9. lower_bound(value):返回set或multiset中第一个大于等于指定值的元素的迭代器。
10. upper_bound(value):返回set或multiset中第一个大于指定值的元素的迭代器。
11. equal_range(value):返回set或multiset中等于指定值的元素的区间,返回一个pair类型的迭代器,第一个元素是lower_bound返回的迭代器,第二个元素是upper_bound返回的迭代器。

3、std::set 和 std::multiset 的示例

#include <iostream>
#include <set>

int main() {
    // std::set 示例
    std::set<int> mySet;

    // 插入元素
    mySet.insert(3);
    mySet.insert(1);
    mySet.insert(4);
    mySet.insert(1); // 重复元素不会被插入

    // 遍历元素
    for (int x : mySet) {
        std::cout << x << " ";
    }
    std::cout << std::endl;

    // 查找元素
    auto it = mySet.find(4);
    if (it != mySet.end()) {
        std::cout << "Found " << *it << std::endl;
    } else {
        std::cout << "Not found" << std::endl;
    }

    // std::multiset 示例
    std::multiset<int> myMultiSet;

    // 插入元素
    myMultiSet.insert(3);
    myMultiSet.insert(1);
    myMultiSet.insert(4);
    myMultiSet.insert(1); // 可以插入重复元素

    // 遍历元素
    for (int x : myMultiSet) {
        std::cout << x << " ";
    }
    std::cout << std::endl;

    // 查找元素
    auto it2 = myMultiSet.find(4);
    if (it2 != myMultiSet.end()) {
        std::cout << "Found " << *it2 << std::endl;
    } else {
        std::cout << "Not found" << std::endl;
    }

    return 0;
}

输出:

1 3 4
Found 4
1 1 3 4
Found 4

在上面的示例中,我们首先创建了两个空的 std::set 和 std::multiset。然后,我们使用 insert() 函数插入一些元素。对于 std::set,重复的元素不会被插入,而对于 std::multiset,可以插入重复的元素。最后,我们使用 find() 函数查找特定元素并输出结果。

需要注意的是,std::set 和 std::multiset 中元素的顺序是按照元素的值从小到大排列的。如果需要按照其他方式排序,可以使用自定义比较函数来实现。

4、std::map和set区别

std::map和std::set都是STL中的关联容器,但它们的主要区别在于:

(1)元素的类型:std::map存储的是键值对,即每个元素都包含一个键和一个值;而std::set只存储键值,即每个元素只包含一个键。

(2)元素的排序:std::map中的元素按照键进行排序,而std::set中的元素按照键进行排序,并且每个键都必须是唯一的。

(3)查找效率:由于std::map中的元素是按照键进行排序的,因此可以通过二分查找等高效算法进行查找;而std::set中的元素也是按照键进行排序的,但由于每个键都必须是唯一的,因此查找效率可能会受到影响。

(4)插入效率:由于std::map和std::set都是基于红黑树实现的,因此插入元素的效率都是O(logn)级别的。

总的来说,std::map适用于需要存储键值对,并且需要按照键进行排序的情况;而std::set适用于只需要存储键,并且需要按照键进行排序,并且每个键都必须是唯一的情况。文章来源地址https://www.toymoban.com/news/detail-460001.html

到了这里,关于STL --- 二、容器 (4)set 和multiset的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++:stl中set(multiset)和map(multimap)的介绍和使用

    本文主要从概念、常用接口和使用方法方面介绍set(multiset)和map(multimap)。 目录 一、概念介绍 1.关联式容器 2.键值对 3. 树形结构的关联式容器 二、set和multiset 1.set的介绍 2.set使用 1. set模板参数列表 2. set构造 3. set迭代器 4. set容量 5. set修改操作 6.set使用举例 3.multiset介绍 4.mul

    2024年02月08日
    浏览(39)
  • 【C++进阶04】STL中map、set、multimap、multiset的介绍及使用

    vector/list/deque… 这些容器统称为 序列式容器 因为其底层为线性序列的数据结构 里面存储的是元素本身 map/set… 这些容器统称为 关联式容器 关联式容器也是用来存储数据的 与序列式容器不同的是 其里面存储的是key, value结构的键值对 在数据检索时比序列式容器效率更高 “键

    2024年02月03日
    浏览(46)
  • C++进阶:详细讲解容器set与map(pair、multiset、multimap)

    C++进阶:详细讲解容器set与map(pair、multiset、multimap) 上次介绍了搜索二叉树:C++进阶:二叉搜索树介绍、模拟实现(递归迭代两版本)及其应用 为了介绍后面的AVLTree和红黑树,我们要进行一些铺垫,就是set与map的介绍啦 关联式容器和序列式容器是 C++ 中两种不同的容器类

    2024年04月12日
    浏览(40)
  • 【高阶数据结构】map和set的介绍和使用 {关联式容器;键值对;map和set;multimap和multiset;OJ练习}

    关联式容器和序列式容器是C++ STL中的两种不同类型的容器。 关联式容器是基于键值对的容器 ,其中每个元素都有一个唯一的键值,可以通过键值来访问元素。关联式容器包括set、multiset、map和multimap。 序列式容器是基于元素序列的容器 ,其中元素按照一定的顺序排列,可以

    2024年02月11日
    浏览(40)
  • C++ STL set容器

    和 map、multimap 容器不同,使用 set 容器存储的各个键值对,要求键 key 和值 value 必须相等。 举个例子,如下有 2 组键值对数据: {\\\'a\\\', 1, \\\'b\\\', 2, \\\'c\\\', 3} {\\\'a\\\', \\\'a\\\', \\\'b\\\', \\\'b\\\', \\\'c\\\', \\\'c\\\'} 显然,第一组数据中各键值对的键和值不相等,而第二组中各键值对的键和值对应相等。对于 set 容器来

    2024年02月02日
    浏览(39)
  • C++ STL set容器使用教程

    set 为关联式容器,翻译为 集合 ,其中的元素类型为 pair ,需要注意 set 容器存储的各个键值对,要求键 key 和值 value 必须相等 基于 set 容器的这种特性,当使用 set 容器存储键值对时,只需要为其提供各键值对中的 value 值(也就是 key 的值)即可。 set 容器 会自行根据键的大

    2024年02月10日
    浏览(36)
  • C++高级编程——STL:list容器、set容器和map容器

    本专栏记录C++学习过程包括C++基础以及数据结构和算法,其中第一部分计划时间一个月,主要跟着黑马视频教程,学习路线如下, 不定时更新,欢迎关注 。 当前章节处于: ---------第1阶段-C++基础入门 ---------第2阶段实战-通讯录管理系统, ---------第3阶段-C++核心编程, -----

    2024年01月25日
    浏览(44)
  • STL容器——unordered_set的用法

    unordered_set 容器,可直译为 无序 set 容器 。即 unordered_set 容器和 set 容器很像,唯一的区别就在于 set 容器会自行对存储的数据进行排序,而 unordered_set 容器不会。 下面是 set 、 multiset 和 unordered_set 之间的差别。 注意这三种集合的底层实现,他决定了算法的时间复杂度。特别

    2024年02月09日
    浏览(47)
  • STL常用容器—string容器

    本质: string是C++风格的字符串,而string本质上是一个类 string和char * 区别: char * 是一个指针 string是一个类,类内部封装了char *,管理这个字符串,是一个char *型的容器。 特点: string 类内部封装了很多成员属性和方法 string管理char*所分配的内存,不用担心复制越界和取值越

    2024年01月16日
    浏览(39)
  • STL-常用容器-stack容器(栈)

    1 stack 基本概念 概念: stack是一种 先进后出 (First In Last Out,FILO)的数据结构,它只有一个出口 栈中只有顶端的元素才可以被外界使用,因此栈不允许有遍历行为 栈中进入数据称为 --- 入栈 push 栈中弹出数据称为 --- 出栈 pop 2 stack 常用接口 功能描述:栈容器常用的对外接口 构

    2024年02月11日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包