首页 > 其他分享 >set, multiset 和 unordered_set, unordered_multiset

set, multiset 和 unordered_set, unordered_multiset

时间:2023-05-10 21:47:19浏览次数:44  
标签:insert set 迭代 插入 set1 multiset unordered

(39条消息) set, multiset 和 unordered_set, unordered_multiset_unordered_set 求并集_张松超的博客-CSDN博客
其次抄了点

一、使用前提

引入头文件

#include <unordered_set>
  • 1
  • 1

二、unordered_set是什么

unordered_set 容器,可直译为“无序 set 容器”。即 unordered_set 容器和 set 容器很像,唯一的区别就在于 set 容器会自行对存储的数据进行排序,而 unordered_set 容器不会。

unordered_set的几个特性:

  1. 不再以键值对的形式存储数据,而是直接存储数据的值 ;
  2. 容器内部存储的各个元素的值都互不相等,且不能被修改;
  3. 不会对内部存储的数据进行排序

三、unordered_set的初始化

创建空的set

unordered_set<int> set1;
  • 1
  • 1

拷贝构造

unordered_set<int> set2(set1);
  • 1
  • 1

使用迭代器构造

unordered_set<int> set3(set1.begin(), set1.end());
  • 1
  • 1

使用数组作为其初值进行构造

unordered_set<int> set4(arr,arr+5);
  • 1
  • 1

移动构造

unordered_set<int> set5(move(set2));
  • 1
  • 1

使用处置列表进行构造

unordered_set<int> set6 {1,2,10,10};
  • 1
  • 1

四、unordered_set的常用内置函数

empty()函数——判断是否为空
//若容器为空,则返回 true;否则 false

set1.empty();
  • 1
  • 1

find()函数——查找
//查找2,找到返回迭代器,失败返回end()

set1.find(2);
  • 1
  • 1

count()函数——出现次数
//返回指2出现的次数,0或1

set1.count(2);
  • 1
  • 1

insert()函数——插入元素

//插入元素,返回pair<unordered_set<int>::iterator, bool>
set1.insert(3);
//使用initializer_list插入元素
set1.insert({1,2,3});
//指定插入位置,如果位置正确会减少插入时间,返回指向插入元素的迭代器
set1.insert(set1.end(), 4);
//使用范围迭代器插入
set1.insert(set2.begin(), set2.end());

关于insert函数的返回值:
insert()只传入单个参数(待插入元素)

  1. 会返回一个 pair 对象
  2. 这个 pair 对象包含一个迭代器,以及一个附加的布尔值用来说明插入是否成功
  3. 如果元素被插入,返回的迭代器会指向新元素
  4. 如果没有被插入,迭代器指向阻止插入的元素
auto pr = words.insert("ninety"); // Returns a pair - an iterator & a bool value

insert()传入两个参数(迭代器+待插入元素)

  1. 可以用一个迭代器作为insert()的第一个参数,它指定了元素被插入的位置
  2. 在这种情况下,只会返回一个迭代器
auto iter = words.insert (pr.first, "nine"); // 1st arg is a hint. Returns an iterator

insert()传入初始化列表

  1. 插入初始化表中的元素
  2. 在这种情况下,什么都没有返回
words.insert({"ten", "seven", "six"});  // Inserting an initializer list

emplace()函数——插入元素(转移构造)

//使用转移构造函数添加新元素3,比insert效率高
set1.emplace(3);

erase()函数——删除元素

//删除操作,成功返回1,失败返回0
set1.erase(1);
//删除操作,成功返回下一个pair的迭代器
set1.erase(set1.find(1));
//删除set1的所有元素,返回指向end的迭代器
set1.erase(set1.begin(), set1.end());

bucket_count()函数——篮子数目

//返回容器中的篮子总数
set1.bucket_count();

bucket_size()函数——篮子中元素数目

//返回1号篮子中的元素数
set1.bucket_size(1);

bucket()函数——在哪个篮子

//元素1在哪一个篮子
set1.bucket(1);

clear()函数——清空

set1.clear();

load_factor()函数——负载因子

//负载因子,返回每个篮子元素的平均数,即size/float(bucket_count);
set1.load_factor();

rehash()函数——设置篮子数目并重新分布

//设置篮子的数量为20,并且重新rehash
set1.rehash(20);
 

标签:insert,set,迭代,插入,set1,multiset,unordered
From: https://www.cnblogs.com/LianIsFlying/p/17389409.html

相关文章

  • R语言EG(Engle-Granger)两步法协整检验、RESET、格兰杰因果检验、VAR模型分析CPI和PPI
    全文链接:http://tecdat.cn/?p=31108最近我们被客户要求撰写关于VAR模型的研究报告,包括一些图形和统计输出。作为衡量通货膨胀的基本指标,消费者价格指数CPI和生产者价格指数PPI的作用关系与传导机制一直是宏观经济研究的核心问题。对此问题的研究显然具有重要的学术价值与现实意......
  • AntDesign Blaozr标签页ReuseTabs的使用以及授权失败的坑
    123<Authorized><ReuseTabsDraggableSize="TabSize.Small"/></Authorized><NotAuthorized>@{NavigationManager.NavigateTo("......
  • [记录一下]lazarus memdataset的filter问题
    在lazarus使用memdataset时,如果filter按下面的方法是得不到想要结果:MEMDataSet1.Filtered:=false;MEMDataSet1.Filter:='tasknameLike'+quotedstr('%'+Edit4.Text+'%');MEMDataSet1.Filtered:=true;最后在官网找到解决办法:unitUnit1;{$modeobjfpc}{$......
  • matlab绘图中set函数的使用汇总
    Matlab绘图中set函数使用汇总%设置标题字体大小,字型set(get(gca,'title'),'FontSize',10,'FontName','宋体');%设置X坐标标题字体大小,字型set(get(gca,'XLabel'),'FontSize',10,'FontName','TimesNewRoman');%设......
  • set
    双关键字set排序#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<vector>#include<set>usingnamespacestd;#defineINF0x3f3f3f3fintmain(){set<pair<int,int>>s;s.insert......
  • Method com/mysql/jdbc/JDBC4ResultSet.getObject(Ljava/lang/String;Ljava/lang/Clas
      mybatis-plus生成的日期类型默认是localdatetime,数据库是datetime,按道理转换应该可以,我又不想把实体类转换成date查看依赖<--locadate/locadatetime的时间依赖--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-ty......
  • Solution Set - “请背诵每条魔法的禁忌”
    目录0.「HAOI2018」「洛谷P4494」反色游戏1.「JSOI2010」「洛谷P6029」旅行2.「CTSC2017」「洛谷P3774」最长上升子序列⭐3.「CTSC2018」「洛谷P4566」青蕈领主⭐4.「CTSC2008」「洛谷P4528」图腾5.「SDOI2017」「洛谷P3779」龙与地下城6.「JSOI2018」「洛谷P4558......
  • setsid 使程序脱离终端运行
    直接使用setsidcmd...$ping::1root399698399637014:51pts/4200:00:00ping::1$setsidping::1root3997071014:52?00:00:00ping::1注意看,现在它已经没有隶属任何进程组(父进程是init)和隶属的会话(没有控制终端pts/x),如果此刻......
  • 启动flink显示ERROR: JAVA_HOME is not set and could not be found.
    问题:JAVA_HOME存在,但启动flink时出现ERROR:JAVA_HOMEisnotsetandcouldnotbefound.原因:环境变量加载顺序不对#/etc/profile.d/hadoop.sh#...exportHADOOP_CLASSPATH=`hadoopclasspath`JAVA_HOME是在java.sh里定义的,而hadoop.sh按照字典序先于java.sh加......
  • Java Test ENV setup for Algorithms, 4th Edition
    setjavaenv,add/home/linxu/myspace/java_projects/algs4/algs4.jartoCLASSPATHsudovim~/.bashrcexportJAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64exportPATH=$PATH:$JAVA_HOME/binexportCLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$JAVA_......