billtian 发表于 2020-12-9 08:22:19

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

map<int, int> sum;
声明一个整数整数对 map数组 长度1000
sum=j;
数组中第i个 map 是k,j这个整数对

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

takashiki 发表于 2020-12-9 09:18:59

当然不对。
map<int, int> sum; 中,第i个map是sum是没问题的,这是数组。但是“map 是k,j这个整数对”这是不对的,map是容器,k,j这个整数对只是这个容器中的一个元素。

canspider 发表于 2020-12-9 09:21:06

无力吐槽,建议先随便找一本讲C++的书来看,并坐坐后面的练习
如果你觉得看书很吃力,建议放弃C++,因为如果连书都看不懂,实在没必要学C++
python,java,c#,js哪个不比c++工资高

liwey 发表于 2020-12-9 09:33:33

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

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

lxvtag 发表于 2020-12-9 09:44:26

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

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

xjavr 发表于 2020-12-9 09:50:37

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

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

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

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

billtian 发表于 2020-12-9 11:18:51

本帖最后由 billtian 于 2020-12-9 16:22 编辑

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

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

map<int, int> sum;
typedef map<int, int>::iterator Iter;

int main ()
{
        sum = 66;
        sum = 77;
        sum = 88;
        sum = 99;
       
        sum = 777;
       
        sum=2;
       
        sum=1977;
       
       
        //sum=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;
                }
        }
}


lxvtag 发表于 2020-12-9 12:06:48

billtian 发表于 2020-12-9 11:18
谢谢大家 基本明白了 写了几句测试了一下

#include


你明白了个鬼{:sweat:}
是我的字太丑了所以你不看么?

canspider 发表于 2020-12-9 12:21:31

lxvtag 发表于 2020-12-9 12:06
你明白了个鬼
是我的字太丑了所以你不看么?

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

lxvtag 发表于 2020-12-9 12:37:31

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

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

canspider 发表于 2020-12-9 12:53:51

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

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

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

lxvtag 发表于 2020-12-9 13:08:15

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

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


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

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

billtian 发表于 2020-12-9 13:29:46

lxvtag 发表于 2020-12-9 13:08
你要这么说就没问题,上边的看着就阴阳怪气。




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

lxvtag 发表于 2020-12-9 13:46:44

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

那不是回你的。

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

billtian 发表于 2020-12-9 13:51:49

lxvtag 发表于 2020-12-9 13:46
那不是回你的。

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

{:handshake:}感谢大家的指点 不管怎么说 还是比发帖前进步了

takashiki 发表于 2020-12-9 13:57:03

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

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

lxvtag 发表于 2020-12-9 14:05:14

takashiki 发表于 2020-12-9 13:57
map sum;
你一直在答非所问,sum明明是个数组,数组的元素才是map类型的。
您再看看9楼的回复,你 ...

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

不聊了,写bug去了。

wanglouxiaozi 发表于 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;
typedef map<int, int>::iterator Iter;

int main ()
{
      sum = 66;
      sum = 77;
      sum = 88;
      sum = 99;

      sum = 777;

      sum = 2;

      sum = 1977;

      //sum=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;
}

wanglouxiaozi 发表于 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\.begin在论坛上会显示为sum.begin!!!!!!!!

billtian 发表于 2020-12-9 16:23:21

wanglouxiaozi 发表于 2020-12-9 16:16
我错了,sum\.begin在论坛上会显示为sum.begin!!!!!!!!

确实是少了 不知道为什么{:victory:}
页: [1]
查看完整版本: 请教C++ STL map 使用方法?