C++ STL映射:这个命令是什么意思?
我遇到了一个竞争问题的解决方案,它使用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",
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;