STL Map:这个命令是什么意思?

时间:2014-04-03 02:07:41

标签: c++ map stl insertion

我遇到了一个使用STL Map的竞争问题的解决方案,我已经知道了不同类型的插入。我知道这些插入(及其差异):

Map[key] = value;Map.insert(make_pair(key,val));

但是这个我不知道它在做什么,只是它适用于我需要解决的问题:

   std::map<int, int> freq;
   int inp;
   // ...

   for (int i = 0; i < n; i++)
    {
        scanf ("%d", &inp);
        freq [inp]++;
    }

    for (int i = 0; i < m; i++)
    {
        scanf ("%d", &inp);
        freq [inp]--;
    }

其中freq是具有一对整数的映射,而inp是一个普通整数。

3 个答案:

答案 0 :(得分:4)

当您使用查找运算符[]并且键不在映射中时,将使用该类型的值初始化值创建条目。在这种情况下,初始化的值int初始化为零,初始值为0. ++--然后对该值进行操作。

答案 1 :(得分:2)

  

我知道这些插入(及其差异):

Map[key] = value;

Map[key]并非严格用于插入。您也可以分配给该值。 postincr / postdecr运算符会修改这些值,作为副作用。

所以Map[key]++是合法的,并按照您的预期行事 - 增加Map[key]中存储的值。相当于:

Map[key] = Map[key] + 1

答案 2 :(得分:0)

你可以显示你初始化freq的位置吗?如果freq是一对“int”,你需要用“freq [inp] .first”和“freq [inp] .second”来访问它们,据我所知“pair”没有重载+或 - 运算符。

for (int i = 0; i < n; i++)
{
    scanf ("%d", &inp);
    freq [inp]++;
}

这里,freq存储输入中找到整数的次数,如果输入为:0,0,0,1,1

map [0] = 3,map [1] = 2

for (int i = 0; i < m; i++)
{
    scanf ("%d", &inp);
    freq [inp]--;
}

同样,只是减去。

在这种情况下,你不能:

Map.insert(make_pair(key,val));

因为:

std::map<int, int> freq;

你说你的地图将整数作为“关键”而整数作为“价值”,不是“地图对”只是一张地图,本来就是一对地图如果你已初始化为     std :: map&gt;频率;

Map[Key] = Value;

如果这是一个竞争问题,我建议您只使用一个数组,将其大小设置为您需要的最大值,并根据需要将其初始化为0.