关于stl中的map用法,疑问
#include <cstdio>
#include <vector>
#include <map>
using namespace std;
map<int , vector<int> >a;
int main()
{
int n ,m ,x,y;
while(scanf("%d %d",&n,&m) == 2)
{
a.clear();
for(int i = 0; i<n;++i)
{
scanf("%d",&x);
if(!a.count(x)) //没有为map表插入元素,怎么来的这句
{
a[x] = vector<int>();//这处的用法,没有看懂
a[x].push_back(i+1);
}
}
}
while(m--)
{
scanf("%d%d",&x,&y);
if(!a.count(y) || a[y].size() < x)
printf("0\n");
else
printf("%d\n",a[y][x-1]);
}
return 0;
}
我是最近才学stl,对map用法不是很了解,我的疑问在代码中标注了,想了很长时间也没结果,希望大神们不吝赐教
fossor
10 years, 3 months ago
Answers
vector<int>()
就是缺省构造一个
vector<int>
。
a[x]=vector<int>()
就是在这个map中将key
x
对应的value设为一个空vector。
if(!a.count(x))
是位于一个for循环中的,而上面说的
a[x]=...
语句会在map中插入元素,所以这个if还是有可能为真的。
另外,由于你用的是map而不是multimap,不支持一个key对应多个value,所以
count(key)
只会返回0或者1,不会是其它值。
PS. 不要混用tab和空格,要不然总有一天你会郁闷至死。
工程塑料113
answered 10 years, 3 months ago