确实想要用的话, 可以考虑试试看用宏定义 任何就可以用''字符串''了 ismajia 发表于 2023-10-12 11:29
enum Row { row1 = 0, row2, row3, }; enum Column { col1 = 0, col2, col3, }; 这样就可以 s[row3][col2] = 102; 如果你row1要对应第3行, 可以调整enum的顺序。但是如果没有特殊的理由,不要这样做,会被人骂死 NewID2017 发表于 2023-10-12 11:41
可以定义成map,如果没performance要求和不需要内存连续。map<string, map<string,int>> claireliu 发表于 2023-10-12 11:37
“row3对应的是第0行。 col2对应的是第0列” 这么做是想给代码里埋地雷吗? uscnc 发表于 2023-10-12 11:43
不是。 但是我的确读过一些代码这么做。是为了增加程序的不可阅读性。 gooog 发表于 2023-10-12 11:56
现在想这样改变数组的值。 s["row3"]["col2"] = 102; s["row1"]["col1"] = 102;
row3对应的是第0行。 col2对应的是第0列
row1对应的是第3行。 col1对应的是第1列 s["row1"]["col1"] = s[3][1]
有时候, "col1", "col2", "col3"可能是特殊字符,比如“!”, "@", "*"等
总结: 问题就是希望c++的2维数组,能这样读取和改变元素, s[0]["@"], s[0]["!"]
map应该可以,就是代码复杂一些。
initialization int arr[4][2] = { {1234, 56}, {1212, 33}, {1434, 80}, {1312, 78} } ; print array #include<iostream> using namespace std; main( ) { int arr[4][2] = { { 10, 11 }, { 20, 21 }, { 30, 31 }, { 40, 41 } } ; int i,j; cout<<"Printing a 2D Array:\n"; for(i=0;i<4;i++) { for(j=0;j<2;j++) { cout<<"\t"<<arr[j]; } cout<<endl; } }
上面copy有一个错误,华人网不知道为什么显示出来不对。arr [ i ] [ j ] 不知道你的row3对应第0行是什么意思。理论上只要你的index在range里,叫什么名字都随便。但是index是必须integer type。不可以是string。如果你想要用string,试试map,把key设成string。
学cs的,google是你的好朋友。网上太多牛人,太多好的方法了。
enum Column { col1 = 0, col2, col3, };
这样就可以 s[row3][col2] = 102;
如果你row1要对应第3行, 可以调整enum的顺序。但是如果没有特殊的理由,不要这样做,会被人骂死
这么做是想给代码里埋地雷吗?
谢谢! 我开始也是这样做的。 #define "1" 0 #define "?" 1 #define "*" 2
但是s[0] ["?"] 好像不行。
补充:这个矩阵的列的名,是键盘上的每个字符。我在问题中用“col1”代替,实际中还包括其他ascii码。 比如“!”, "@", 等等。
我就是希望 s[0]["@"] s[0]["!"]能执行。
高手来了 赞👍
多谢!
如果col1,col2, col3, 都是比较不常见的字符,比如 !, @, * 这种情况该如何是好?
map可以解决 "!", "@", 作为列名的问题。 谢谢!
不是。
但是我的确读过一些代码这么做。是为了增加程序的不可阅读性。
自己读也费劲啊 伤敌一千,自损八百
有程序可以把你的code里的变量名全改的面目全非,同时你可以保留易读的版本
故意这样做?这样的code在我司不可能通过code review