Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ STL映射:这个命令是什么意思?_C++_Map_Stl_Insertion - Fatal编程技术网

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

C++ STL映射:这个命令是什么意思?,c++,map,stl,insertion,C++,Map,Stl,Insertion,我遇到了一个竞争问题的解决方案,它使用STL映射,使用了一种我已经知道的不同类型的插入。我知道这类插入(及其区别): Map[key]=值和Map.insert(make_-pair(key,val)) 但这一个我不知道它在做什么,只是它解决了我需要解决的问题: std::map<int, int> freq; int inp; // ... for (int i = 0; i < n; i++) { scanf ("%d",

我遇到了一个竞争问题的解决方案,它使用STL映射,使用了一种我已经知道的不同类型的插入。我知道这类插入(及其区别):

Map[key]=值
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]--;
    }
std::map-freq;
int-inp;
// ...
对于(int i=0;i

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

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

我知道这类插入(及其区别):

Map[key]
不严格用于插入。您也可以指定该值。postincr/postdecr运算符会修改这些值,这是一种副作用

因此,
Map[key]++
是合法的,并且做了您可能期望的事情——增加存储在
Map[key]
中的值。相当于:

Map[key] = Map[key] + 1

你能告诉我你在哪里初始化了freq吗?如果freq是一对int,你需要使用“freq[inp].first”和“freq[inp].second”访问它们,而且据我所知,“pair”没有重载+或-运算符

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

std::map<int, int> freq;
如果这是一个竞争问题,我建议您只使用一个数组,将其大小设置为所需的最大值,并根据需要在0中初始化它

for (int i = 0; i < m; i++)
{
    scanf ("%d", &inp);
    freq [inp]--;
}
Map.insert(make_pair(key,val));
std::map<int, int> freq;
Map[Key] = Value;