Trong C++ các mảng được đánh số từ 0, nếu mình muốn đánh số âm hay đánh số kí tự trong mảng 2 chiều giống Pascal thì phải làm sao vd: a[-5][-6] = 1 hay a['A']['G'] = 4. Ai biết vào chỉ mình với.

 

Ví dụ: a[-5][-6] = 1 thì xử lý bằng cách a[-5 + p][-6 + p] = 1 với p là sổ đủ lớn để chỉ số cần đánh dấu khi cộng p >= 0

Còn một cách khác để đánh dấu là bạn dùng Map trong STL

#include <iostream>
#include <string>
#define MAXN 200

int a[256][256];
std::string b[MAXN][MAXN];

int main() {
	
	a['A']['G'] = 12345;
	std::cout << a['A']['G'] << std::endl;
	
	b[-5 + MAXN][-6 + MAXN] = "TEST_STRING";
	std::cout << b[-5 + MAXN][-6 + MAXN] << std::endl;
	
	return 0;
}

Vì mỗi kí tự được biểu diễn bằng số trong bảng mã ASCII nên bạn cứ dùng như nó như chỉ số bình thường thôi.

Trả lời Cryst
  Hiện bài gốc

Ok tks bạn ^^

Trả lời arsenal2310
  Hiện bài gốc

Ờ mà bạn chỉ rõ cho mình biết cách dùng Map vs

Trả lời LeNhut
  Hiện bài gốc

Map thì bạn có thể tra trong đây http://www.cplusplus.com/reference/map/map/

Bản chất map là một cái cây, do đó mỗi thao tác trên map thường có độ phức tạp là O(logN) (với N là số phần tử của map)
Bạn có thể sử dụng map như mảng bình thường nhưng độ phức tạp của bạn sẽ tăng lên.

Ví dụ 

Mảng 

int a[10];
int n = 10;
//O(n)
for(int i = 0; i < n; ++i) 
    a[i] = i;
a[8] = 15; //O(1)
a[8] += 1; //O(1)

 

Map

map<int, int> a;
int n = 10;
//O(NlogN)
for(int i = 0; i < n; ++i) 
    a[i] = i;
a[8] = 15; //O(logN)
a[8] += 1; //O(logN)

Để hiểu chi tiết về map bạn đọc link mình gửi :D 
Map là một công cụ tốt của C++ giúp bạn có thể code các bài toán một cách đỡ phức tạp hơn :D

Trả lời iamquang95
  Hiện bài gốc

thanks ^^