【问题标题】:How to set value of an unordered map to number other than 0如何将无序映射的值设置为 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,但不确定这是否明智。

标签: c++ unordered-map


【解决方案1】:

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

struct MyInt
{
    int i = -1;
};

unordered_map<int, MyInt> umap; 

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-19
    相关资源
    最近更新 更多