2014-08-30 137 views
0

我需要創建一個非常快速的方式來獲取對象列表,我想一個對象數組數組可以工作。也許有不同的方式來做到這一點,所以隨時推薦一個備用的實現。我有一組對象,我需要按指定值分組。例如,我將有一組需要通過數字10訪問的對象。因此,我會使用數字10找到對象組,然後遍歷每個對象以在每個對象上執行任務。對象數組的陣列

10 - Object1, Object2, Object3 
11 - Object4, Object5 

我需要非常快的訪問這些對象,這就是爲什麼我想對象的數組的數組。我查看了矢量和地圖,但完全不瞭解它們。

我使用g ++編譯器在樹莓派上使用C++。

請讓我知道你的想法,我非常感謝你提前。

+1

你想如'的std :: multimap中'或'的std :: unordered_multimap '? – ikh 2014-08-30 02:39:05

+0

使用'multimap'是鍵可以重複,在這種情況下會浪費key的每個對象的'sizeof(key)'。看問題,如果關鍵是在一個範圍內,你可以使用'std :: vector >>'(在外部向量的每個索引中將是該索引的對象,可以使用基本索引跳過索引如果範圍是例如1000-2000,如果密鑰是分散的,使用'std :: map >',對象集合的搜索是** O(log keys)* *和對象的迭代緩存友好 – NetVipeC 2014-08-30 02:57:39

回答

0

對象數組陣列通常被稱爲矩陣。你可以將矩陣想象成一個網格。這將是訪問所有對象的最快和最基本的方式。創建一個矩陣聲明如下。

int matrix[10][10]; 

現在填寫矩陣的每個點與對象

for(int row = 0; row<10;row++){ 
    for(int column = 0; column<10;column++){ 
      matrix[row][column] = Obj(); 
    } 
} 

現在的矩陣充滿你可以通過一個簡單的快循環

訪問組5
for(int i = 0; i<matrix[].length;i++){ 
    matrix[4] = _________ 
} 

這做最快最簡單的方法來嘗試你正在做的事情。我希望這有幫助。

+0

感謝您的建議,但是,我試過了,這不起作用,因爲我試圖添加一個對象到一個int數組。我做錯了什麼?矩陣[行] [ column] = myObj(); – Edd 2014-09-02 02:18:17

1
  1. 對該組對象使用std::set。使用std::map鍵入這些組。

這應該工作:

std::map<int, std::set<Object>> objects;