c++ - 关于stl中的map用法,疑问
巴扎黑
巴扎黑 2017-04-17 11:30:32
[C++讨论组]
#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用法不是很了解,我的疑问在代码中标注了,想了很长时间也没结果,希望大神们不吝赐教

巴扎黑
巴扎黑

全部回复(2)
高洛峰

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和空格,要不然总有一天你会郁闷至死。

伊谢尔伦

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

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

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

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号