搜索
bottom↓
回复: 19

请教C++ STL map 使用方法?

[复制链接]
(11211237)

出0入4汤圆

发表于 2020-12-9 08:22:19 | 显示全部楼层 |阅读模式
map<int, int> sum[1000];
声明一个整数整数对 map数组 长度1000
sum[i][k]=j;
数组中第i个 map 是k,j这个整数对

以上理解正确吗?欢迎指点,谢谢!
(11207837)

出0入8汤圆

发表于 2020-12-9 09:18:59 | 显示全部楼层
当然不对。
map<int, int> sum[1000]; 中,第i个map是sum[i]是没问题的,这是数组。但是“map 是k,j这个整数对”这是不对的,map是容器,k,j这个整数对只是这个容器中的一个元素。
(11207710)

出0入0汤圆

发表于 2020-12-9 09:21:06 来自手机 | 显示全部楼层
无力吐槽,建议先随便找一本讲C++的书来看,并坐坐后面的练习
如果你觉得看书很吃力,建议放弃C++,因为如果连书都看不懂,实在没必要学C++
python,java,c#,js哪个不比c++工资高
(11206963)

出0入0汤圆

发表于 2020-12-9 09:33:33 | 显示全部楼层
canspider 发表于 2020-12-9 09:21
无力吐槽,建议先随便找一本讲C++的书来看,并坐坐后面的练习
如果你觉得看书很吃力,建议放弃C++,因为如 ...

我怎么觉得C++更容易找到工资高的,而且年龄焦虑要比你说的几种语言来的晚很多。另外职位也相对多,注意不是绝对多。而是求职人数和职位数的比例要比其它几种语言更友好很多。
(11206310)

出0入127汤圆

发表于 2020-12-9 09:44:26 | 显示全部楼层
基本都不太对,你的理解都是停留在c的数组,map是键值对(key-value).
1.stl的容器一般都不需要预先声明大小,元素数量可以动态增减.
2.sum[i]=j表示给key为i的元素赋值j.
3.j=sum[i]表示将key为i的元素赋值给j,这里不能说成第i个元素,虽然在这个题设下结果相同.

注意sum[i]这个方法,如果不存在key为i的元素,将会自动添加,而value会被赋默认值。
(11205939)

出0入0汤圆

发表于 2020-12-9 09:50:37 | 显示全部楼层
liwey 发表于 2020-12-9 09:33
我怎么觉得C++更容易找到工资高的,而且年龄焦虑要比你说的几种语言来的晚很多。另外职位也相对多,注意 ...

C++是蛮多的,服务器后端,密集计算、游戏、工业控制,嵌入式等。
但开发效率上不去,培养一个成熟合格的C++工程师花费的时间太长了。

现在的小孩都学什么python、java、javascript、golang上手要快很多,因为轮子都造好了,使用方便。
使用c++有时候虽然也有轮子,但是轮子要在github网上上搜索,相比其他语言更加的花费时间,而且配环境都要花不少精力,还要解决各种冲突,等装好轮子,人家业务都做得差不多了。

其他语言就一条命令,轮子装好了,开车吧。
c++就是还要管这轮胎什么材料呀,轮毂结不结实呀,气压要打到多少呀,要怎么安装上去呢,螺丝用什么型号的呢,用什么扳手,拧多少扭矩。
(11200645)

出0入4汤圆

 楼主| 发表于 2020-12-9 11:18:51 | 显示全部楼层
本帖最后由 billtian 于 2020-12-9 16:22 编辑

谢谢大家 基本明白了 写了几句测试了一下

#include<bits/stdc++.h>
using namespace std;

map<int, int> sum[10];
typedef map<int, int>::iterator Iter;

int main ()
{
        sum[0][5] = 66;
        sum[0][5] = 77;
        sum[0][6] = 88;
        sum[0][7] = 99;
       
        sum[1][55] = 777;
       
        sum[4][1000]=2;
       
        sum[9][999]=1977;
       
       
        //sum[15][1999]=1999;
       
        for(int i=0;i<10;i++)
        {
                cout<<"----------"<<i<<"----------"<<sum.size()<<"----------"<<endl;
                for (Iter it=sum.begin(); it!=sum.end(); it++)
                {
                        cout<<it->first<<" "<<it->second<<endl;
                }
        }
}


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
(11197768)

出0入127汤圆

发表于 2020-12-9 12:06:48 | 显示全部楼层
billtian 发表于 2020-12-9 11:18
谢谢大家 基本明白了 写了几句测试了一下

#include

你明白了个鬼
是我的字太丑了所以你不看么?
(11196885)

出0入0汤圆

发表于 2020-12-9 12:21:31 来自手机 | 显示全部楼层
lxvtag 发表于 2020-12-9 12:06
你明白了个鬼
是我的字太丑了所以你不看么?

不是他不看你写的内容,而是你没看懂他在楼主位写的内容
有效交流的前提是双方有共同基础,你忽略了楼主位的内容,写了一堆正确的废话,当然没人看
(11195925)

出0入127汤圆

发表于 2020-12-9 12:37:31 | 显示全部楼层
canspider 发表于 2020-12-9 12:21
不是他不看你写的内容,而是你没看懂他在楼主位写的内容
有效交流的前提是双方有共同基础,你忽略了楼主 ...

明明字字都在回答标题和楼主位内容,怎么就成了正确的废话?
(11194945)

出0入0汤圆

发表于 2020-12-9 12:53:51 来自手机 | 显示全部楼层
lxvtag 发表于 2020-12-9 12:37
明明字字都在回答标题和楼主位内容,怎么就成了正确的废话?

“键值对”,“容器”,“元素”这些在你看来是理所当然的东西,对楼主而言就是天书
为什么上大学前要读高中
你会和小学生讲柯西不等式吗,虽然你说的都对,小学生听不懂就是废话

楼主想要的答案其实是,map只是一维数组
然后再引申出下标可以不是数字,可以自己增长
(11194081)

出0入127汤圆

发表于 2020-12-9 13:08:15 | 显示全部楼层
canspider 发表于 2020-12-9 12:53
“键值对”,“容器”,“元素”这些在你看来是理所当然的东西,对楼主而言就是天书
为什么上大学前要读 ...

你要这么说就没问题,上边的看着就阴阳怪气。


要是我说,楼主就你这水平学个毛C++,回家放羊去吧。。。

你觉得对楼主会有什么帮助吗?
(11192790)

出0入4汤圆

 楼主| 发表于 2020-12-9 13:29:46 | 显示全部楼层
lxvtag 发表于 2020-12-9 13:08
你要这么说就没问题,上边的看着就阴阳怪气。

有放早回去了 没办法大家都得谋生 分工不同而已 闻道有先后 术业有专攻 自己在某个领域比别人强算不了什么  别那么大火气 年轻人
(11191772)

出0入127汤圆

发表于 2020-12-9 13:46:44 来自手机 | 显示全部楼层
billtian 发表于 2020-12-9 13:29
有放早回去了 没办法大家都得谋生 分工不同而已 闻道有先后 术业有专攻 自己在某个领域比别人强算不了什 ...

那不是回你的。

算了,写的好赖都无所谓,挣钱才重要。。。
(11191467)

出0入4汤圆

 楼主| 发表于 2020-12-9 13:51:49 | 显示全部楼层
lxvtag 发表于 2020-12-9 13:46
那不是回你的。

算了,写的好赖都无所谓,挣钱才重要。。。

  感谢大家的指点 不管怎么说 还是比发帖前进步了
(11191153)

出0入8汤圆

发表于 2020-12-9 13:57:03 | 显示全部楼层
lxvtag 发表于 2020-12-9 12:37
明明字字都在回答标题和楼主位内容,怎么就成了正确的废话?

map<int, int> sum[1000];
你一直在答非所问,sum明明是个数组,数组的元素才是map<int, int>类型的。
您再看看9楼的回复,你确认你看懂了楼主位的内容?
(11190662)

出0入127汤圆

发表于 2020-12-9 14:05:14 | 显示全部楼层
takashiki 发表于 2020-12-9 13:57
map sum[1000];
你一直在答非所问,sum明明是个数组,数组的元素才是map类型的。
您再看看9楼的回复,你 ...

好吧,是我看错了,没想到楼主初学map就搞了这么复杂的结构。

不聊了,写bug去了。
(11182901)

出0入0汤圆

发表于 2020-12-9 16:14:35 | 显示全部楼层
billtian 发表于 2020-12-9 11:18
谢谢大家 基本明白了 写了几句测试了一下

#include


for (Iter it=sum.begin(); it!=sum.end(); it++) 楼主这一行代码是不是漏写了什么?sum.begin应该是sum.begin吧。

代码风格需要从开始就要注意呀,不然养成习惯了很难改掉。
下面是我的代码风格,供参考:
#include <iostream>
#include <map>

using namespace std;

map<int, int> sum[10];
typedef map<int, int>::iterator Iter;

int main ()
{
        sum[0][5] = 66;
        sum[0][5] = 77;
        sum[0][6] = 88;
        sum[0][7] = 99;

        sum[1][55] = 777;

        sum[4][1000] = 2;

        sum[9][999] = 1977;

        //sum[15][1999]=1999;

        for (int i = 0; i < 10; i++) {
                cout << "----------" << i << "----------" << endl;
                for (Iter it = sum.begin(); it != sum.end(); it++)
                        cout << it->first << " " << it->second << endl;
        }

        return 0;
}
(11182793)

出0入0汤圆

发表于 2020-12-9 16:16:23 | 显示全部楼层
本帖最后由 wanglouxiaozi 于 2020-12-9 16:17 编辑
wanglouxiaozi 发表于 2020-12-9 16:14
for (Iter it=sum.begin(); it!=sum.end(); it++) 楼主这一行代码是不是漏写了什么?sum.begin应该是sum. ...


我错了,sum\[i\].begin在论坛上会显示为sum.begin!!!!!!!!
(11182375)

出0入4汤圆

 楼主| 发表于 2020-12-9 16:23:21 | 显示全部楼层
wanglouxiaozi 发表于 2020-12-9 16:16
我错了,sum\.begin在论坛上会显示为sum.begin!!!!!!!!

确实是少了 不知道为什么
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子论坛 ( 公安交互式论坛备案:44190002001997 粤ICP备09047143号 )

GMT+8, 2021-4-18 02:36

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表