STL 映射:这个命令是什么意思

STL Map: What does this command mean?

本文关键字:命令 是什么 意思 映射 STL      更新时间:2023-10-16

我遇到了一个使用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 是普通整数。

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

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

Map[key] = value;

Map[key]严格来说不是为了插入。 您也可以分配给该值。 作为副作用,postincr/postdecr 运算符确实会修改这些值。

因此,Map[key]++是合法的,并且可以按照您的期望进行操作 - 增加存储在Map[key]的值。 相当于:

Map[key] = Map[key] + 1

你能显示你在哪里初始化freq吗?,如果freq是一对整数,你需要使用"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

地图 [0] = 3,地图 [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;

你是说你的映射将有一个整数作为"键"和一个 intenger 作为"值",不,"对映射"只是一个映射,如果你初始化为 标准::地图>频率;

Map[Key] = Value;

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