首页 > 其他分享 >unordered_set 的初始化方法

unordered_set 的初始化方法

时间:2023-08-22 22:00:27浏览次数:29  
标签:std 初始化 set mySet 哈希 unordered

unordered_set是一个哈希表的实现,因此初始化其实就是给它分配一定的空间,并且指定哈希表中每个元素的存储方式。

unordered_set的初始化方式有以下几种:

  1. 无参构造函数
std::unordered_set<int> mySet;

默认情况下,unordered_set会分配一定的内存,并且使用默认的哈希函数和比较函数。

  1. 拷贝构造函数
std::unordered_set<int> mySet(otherSet);

将另外一个unordered_set拷贝到当前的unordered_set中。

  1. 移动构造函数
std::unordered_set<int> mySet(std::move(otherSet));

将另外一个unordered_set移动到当前的unordered_set中。

  1. 初始化列表
std::unordered_set<int> mySet = {1, 2, 3};

使用大括号{}来初始化unordered_set。

  1. 迭代器
std::vector<int> vec = {1, 2, 3};
std::unordered_set<int> mySet(vec.begin(), vec.end());

使用迭代器来初始化unordered_set。这里是用vector作为示例,如果你有其他容器也可以使用它们的迭代器来初始化unordered_set。

  1. 自定义哈希函数和比较函数
struct MyHash {
    std::size_t operator()(const Person& p) const {
        return std::hash<std::string>()(p.getName()) ^ std::hash<int>()(p.getAge());
    }
};
​
struct MyEqual {
    bool operator()(const Person& lhs, const Person& rhs) const {
        return lhs.getName() == rhs.getName() && lhs.getAge() == rhs.getAge();
    }
};
​
std::unordered_set<Person, MyHash, MyEqual> mySet;

这里我们自定义了哈希函数和比较函数,可以对自定义的类型进行unordered_set初始化。其中MyHash用于计算哈希值,MyEqual用于比较两个元素是否相等。

标签:std,初始化,set,mySet,哈希,unordered
From: https://www.cnblogs.com/ningao/p/17649798.html

相关文章

  • 类和对象(对象的初始化和清理)
    对象的初始化和清理是两个非常重要的安全问题:一个对象或者变量没有初始状态,对其使用后果是未知的。同样的使用完一个对象或者变量,没有及时清理,也会造成一定的安全问题。c++利用构造函数和析构函数解决上述问题。构造函数:主要作用在于创建对象时为对象的成员属性赋值,构造函数由编译......
  • Halcon 深度学习的例子错误set_deep_ocr_param (DeepOcrHandle, 'device', DLDevice)
    set_deep_ocr_param(DeepOcrHandle,'device',DLDevice)这句话报错设置的设备不对。解决办法是:注释掉这句代码在第27行代码:create_deep_ocr([],[],DeepOcrHandle)下面加上这句:set_suitable_device_in_ocr_handle(DeepOcrHandle)就可以解决问题。......
  • 本地nacos启动报错: Please set the JAVA_HOME variable in your environment, We nee
    编辑startup.cmd文件将模式从cluster改为standalone插入一行指定你的JAVA_HOME路径setJAVA_HOME="C:\dev_files\jdk17"然后启动nacos即可~......
  • [Lua][Love Engine] 有效碰撞处理の类别与位掩码 | fixture:setFilterData
    有效的碰撞处理只用IF判断假设在一个物理世界,不希望两个同类实体发生碰撞,那么localbegin_contact_callback=function(fixture_a,fixture_b)localentity_a_type=fixture_a:getUserData()localentity_b_type=fixture_b:getUserData()--如果碰撞的两个实体不......
  • this.$set的使用方法
    //对象的属性sex的值更新为"男"letobj={name:"六四",age:18,sex:"女"}this.$set(obj,"sex","男")//第一个参数是对象,第二个参数是更新的属性名称,第三个参数是新的内容//更新之后的obj是{name:"六四",age:18,sex:"男"}letarr=["星期一&qu......
  • Unity 资源加载的两种方式:Resources和AssetBundle最详细的解析(转)
    https://blog.csdn.net/xinzhilinger/article/details/115408934前言:在游戏开发学习初期,游戏体量较小,如果游戏场景需要Asset中的资源,我们可能会通过拖动的方式,将其添加到游戏场景中。而到了实际工作中,会发现再这样做就会使得各种拖动的资源非常复杂,难以查找与维护关于资源:在......
  • ValueError: setting an array element with a sequence.
    1.错误报错ValueError:settinganarrayelementwithasequence.Therequestedarrayhasaninhomogeneousshapeafter1dimensions.Thedetectedshapewas(12782,)+inhomogeneouspart.2.问题原因numpy版本问题:解决办法:卸载现有版本numpy,安装numpy1.21.0(python3.6)......
  • 解决CondaVerificationError: setuptools appears to be corrupted
    问题描述使用Anaconda创建新环境,创建环境时或创建虚拟环境后进入到虚拟环境中安装Python,指定Python版本号小于3.7时,总是会出现如下报错:尝试使用condaclean--all并一路点y,无果而终。解决方案定位到指定包的位置,例如上图中红框展现出来的文件路径,进入到该路径下,将提示已......
  • daemonset只运行在指定节点
    1.spec.template.spec.nodeSelector如,只在node标签有daemonset=true的节点上运行pod:apiVersion:apps/v1kind:DaemonSetmetadata:name:ssd-monitor-nodelabelnamespace:controller-testspec:selector:matchLabels:app:ssd-monitor-nodelabelte......
  • Java踩坑3.org.gradle.api.tasks.sourceset.getcompiloconfigurationname
    idea2018自带gradle版本4.1我改properties文件为7.5启动项目,sync时报错,如标题。解决步骤:1.我尝试更改jdk9和11都一样报错。2.我尝试改properties文件为6.4不报错。3.我仍然使用properties文件为7.5,不理会build窗口的这个错误。在右侧的gradle插件build,clean这些正常使用。......