我想創建一個映射,其中鍵是一個int,並且該值是一個數組列表(int[][]
)。包含一個列表的C++ map
我嘗試這樣做:
const int R = 4, C = 5;
std::map<int, std::list<int[R][C]> > s;
,但它不會編譯,我不明白爲什麼...(R和C程序的參數,但在執行過程中不發生變化)。
我想創建一個映射,其中鍵是一個int,並且該值是一個數組列表(int[][]
)。包含一個列表的C++ map
我嘗試這樣做:
const int R = 4, C = 5;
std::map<int, std::list<int[R][C]> > s;
,但它不會編譯,我不明白爲什麼...(R和C程序的參數,但在執行過程中不發生變化)。
數組不是可複製或可複製的,它是標準容器的元素必須是可複製的。您的代碼將按原樣編譯,但是數組類型違反了標準容器的要求,您將遇到未定義的行爲。您不能擁有std::list<int[R][C]>
。然而,C++ 11提供了一個很好的新的編譯時間常數大小std::array
爲您的樂趣:
typedef std::array<std::array<int, C>, R> array_2d;
typedef std::list<array_2d> array_list;
std::map<int, array_list> s;
否則,其他的替代品使用std::vector
代替std::array
(首選),或有一個int**
和std::list
動態分配你的二維數組。
但是,我會考慮對您的設計進行重新思考。這真的是你想要的結構嗎?是否應將任何數據分組到struct
?
但是,OP的代碼在GCC 4.7.2和Clang 3.2 – 2013-02-12 14:20:34
下編譯得很好,謝謝,但我沒有C++ 11 ...有沒有另一種解決方案? – Jav 2013-02-12 14:21:38
@Jav:你在用什麼編譯器? – 2013-02-12 14:22:07
你使用什麼編譯器? – 2013-02-12 14:18:34
「不起作用」對你所看到的問題並不是很好的描述。你應該真的告訴我們,如果你想要任何人能夠幫助... – sth 2013-02-12 14:20:08
你確定你不想使用向量?不管是否改變,R和C都不能是程序的參數。它們必須是不變的,必須具有已知的價值。因爲int [R] [C]的大小在編譯時必須知道。如果該數字未知,則必須使用動態調整大小的數組作爲C++中的矢量。 –
Pihhan
2013-02-12 14:23:23