2015-09-10 51 views
0

我有幾個對象,每個對象有2個屬性alpha和beta。
我有大量的操作,我給我的對象,我需要得到相應的對象的alpha和beta的值。有2種方式來做到這一點 -哪個更好?使用2個數組或數組對?

1)使用2個陣列 - 一個用於α-和一個用於測試

for(each query){ 
    cin>>index; 
    int val1 = alpha[index]; 
    int val2 = beta[index]; 
    //Do something with val1 and val2 
} 

2)使用對陣列

for(each query){ 
    cin>>index; 
    pair<int,int> requiredPair = pairArray[index]; 
    int val1 = requiredPair.first; 
    int val2 = requiredPair.second; 
    //Do something with val1 and val2 
} 

哪個上述方法更高效?我認爲,由於緩存,方法2會更有效率。這是真的嗎?另外,如果每個對象有多個屬性會怎樣。使用多個數組還是一個struct數組會更好?

+3

衡量,衡量,衡量......我們不可能用此代碼預測緩存行爲等。 – deviantfan

+1

使用方法2.無需繁殖實體。 –

+2

如果你真的在做輸入,'cin >> index'不只是一個例子,那麼它並不重要。 –

回答

-1

CPU緩存策略依賴於空間上和時間上接近的數據。換句話說,在時間上接近的訪問被假定爲在存儲器地址中接近。

所以,如果你一起訪問記錄中的兩個字段,那麼單個數組可能會更有意義。如果您正在訪問一個字段中的所有記錄,然後在另一個字段中記錄所有記錄,那麼2個數組可能會更有意義。

順便說一句,我一般避免std::pair,喜歡struct因爲firstsecond有較少的意義,在一個structnamedate

+0

第一次接受-1職位 – doron

相關問題