2013-02-12 99 views
1

我想創建一個映射,其中鍵是一個int,並且該值是一個數組列表(int[][])。包含一個列表的C++ map

我嘗試這樣做:

const int R = 4, C = 5; 
std::map<int, std::list<int[R][C]> > s; 

,但它不會編譯,我不明白爲什麼...(R和C程序的參數,但在執行過程中不發生變化)。

+0

你使用什麼編譯器? – 2013-02-12 14:18:34

+2

「不起作用」對你所看到的問題並不是很好的描述。你應該真的告訴我們,如果你想要任何人能夠幫助... – sth 2013-02-12 14:20:08

+1

你確定你不想使用向量?不管是否改變,R和C都不能是程序的參數。它們必須是不變的,必須具有已知的價值。因爲int [R] [C]的大小在編譯時必須知道。如果該數字未知,則必須使用動態調整大小的數組作爲C++中的矢量。 – Pihhan 2013-02-12 14:23:23

回答

4

數組不是可複製或可複製的,它是標準容器的元素必須是可複製的。您的代碼將按原樣編譯,但是數組類型違反了標準容器的要求,您將遇到未定義的行爲。您不能擁有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

+1

但是,OP的代碼在GCC 4.7.2和Clang 3.2 – 2013-02-12 14:20:34

+0

下編譯得很好,謝謝,但我沒有C++ 11 ...有沒有另一種解決方案? – Jav 2013-02-12 14:21:38

+0

@Jav:你在用什麼編譯器? – 2013-02-12 14:22:07

相關問題