如何将无序映射的值设置为 0 以外的数字

Posted

技术标签:

【中文标题】如何将无序映射的值设置为 0 以外的数字【英文标题】:How to set value of an unordered map to number other than 0 【发布时间】:2020-11-28 10:29:21 【问题描述】:

当我声明一个无序映射时,默认情况下所有值都分配为 0。但我想将所有值分配为 -1。有什么办法吗?

例如看这段代码

#include <iostream>
#include <unordered_map> 

using namespace std;
 unordered_map<int, int> umap; 
 

int main()

     cout<<umap[10];
    

此代码的输出为 0。请注意,未分配的位置默认输出为 0。我的问题是,有什么办法可以改变这个并分配一个我喜欢的号码?

【问题讨论】:

注意:如果元素不存在,umap[10] 实际上会插入到地图中。您的 cout 线路正在修改地图。 ^ @spectras 所说的是整个问题。您的示例中没有“所有值”。只要您写umap[10],您就会在地图中创建一个值。由于您不分配值,因此使用默认构造函数。如果你要写类似cout&lt;&lt;umap[10]=-1; 的东西,那就不一样了。 当访问umap[10] 并且没有找到实例时,会放入一个默认的(值)构造元素。因此对于unordered_map&lt;int,int&gt;,它将始终是0。您可以将int 替换为与int 兼容的类,默认构造函数为-1,但不确定这是否明智。 【参考方案1】:

您可以使用默认构造函数创建自定义类型以初始化为-1

struct MyInt

    int i = -1;
;

unordered_map<int, MyInt> umap; 

如果您不想键入 .i 访问器,可以提供 operator int() 和其他运算符来模仿常规 int 的行为。

【讨论】:

以上是关于如何将无序映射的值设置为 0 以外的数字的主要内容,如果未能解决你的问题,请参考以下文章

如何将数组数字映射到定时值

将熊猫行索引重置为从 0 以外的数字开始?

如何将3个数字映射到一个值(动态编程)

如何将数字范围映射到 SQL Server 或 Clickhouse 中的数字

POJ 1200Crazy Search(将字符映射为数字,将NC进制hash成10进制)

VBA - 如何将单元格的值从文本转换为数字