关于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用法不是很了解,我的疑问在代码中标注了,想了很长时间也没结果,希望大神们不吝赐教

stl C++

fossor 10 years, 3 months ago

if(!a.count(x)) //没有为map表插入元素,怎么来的这句

如果没有插入键为x的元素,那就是0。

a[x] = vector <int> ();//这处的用法,没有看懂 </int>

默认构造一个 vector<int> ,然后把它赋给(c++11的话是移动到)a[x]。

aimili answered 10 years, 3 months ago

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

Your Answer