Trong C++, bạn có thể làm điều này:Dân số biên dịch của cấu trúc dữ liệu khác với mảng?
static const char * [4] = {
"One fish",
"Two fish",
"Red fish",
"Blue fish"
};
... và cung cấp cho bạn một mảng cấu trúc dữ liệu chỉ đọc thoải mái mà không mất bất kỳ chu kỳ CPU để khởi tạo trong thời gian chạy, bởi vì tất cả các dữ liệu đã được đặt ra cho bạn (trong các trang bộ nhớ chỉ đọc của trình thực thi) bởi trình biên dịch.
Nhưng nếu tôi muốn sử dụng cấu trúc dữ liệu khác thay vì một mảng thì sao? Ví dụ, nếu tôi muốn cấu trúc dữ liệu của tôi để có tra cứu nhanh thông qua một phím, tôi sẽ phải làm một cái gì đó như thế này:
static std::map<int, const char *> map;
int main(int, char **)
{
map.insert(555, "One fish");
map.insert(666, "Two fish");
map.insert(451, "Red fish");
map.insert(626, "Blue fish");
[... rest of program here...]
}
... đó là ít thanh lịch và kém hiệu quả như các cấu trúc dữ liệu bản đồ là nhận được dân cư tại thời gian chạy, mặc dù tất cả các dữ liệu cần thiết đã được biết tại thời gian biên dịch và do đó công việc đó có thể có (về mặt lý thuyết) đã được thực hiện sau đó.
Câu hỏi của tôi là, có cách nào trong C++ (hoặc C++ 11) để tạo cấu trúc dữ liệu chỉ đọc (như bản đồ) có dữ liệu được thiết lập hoàn toàn tại thời gian biên dịch và do đó được điền trước và sẵn sàng để sử dụng tại thời gian chạy, cách một mảng có thể được?
Bạn có nhớ trả lời câu hỏi của tôi tương tự nhưng vector không? Giá trị của tôi là loại đôi http://stackoverflow.com/questions/15471122/getting-started-with-boost-mpl-with-vector-and-push-back – woosah