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.
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.
Ok tks bạn ^^
Ờ mà bạn chỉ rõ cho mình biết cách dùng Map vs
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
thanks ^^