2015-12-14 24 views
1

在C++用於存儲元組關鍵數據結構:參數關係列表

我運行優化算法來找出一組的溫度和溼度的給定組合參數,我想高效的外觀結構用於進一步計算的迭代和迭代時間。

示例:我計算了溫度[0k-300k] x溼度[x-xxx]範圍內設備的所有5參數。我想將它們存儲在內存中,當我在給定的溫度和溼度下調用某個函數時,它應該能夠使用該元組作爲關鍵值快速加載相關的5個參數。

我在想像一個多圖,例如std::multimap<double, std::vector<double>>,但我很擔心隨機攜帶的行李。

編輯:

確定一個例子是這樣的(對於一個變量):

for x in range(Temperature){ 
     parameterList[x] = (deviceClass.geneticAlgo(loss = 1, x)); 

deviceClass.setParameters(parameterList); 

然後該類欲:

double later_calc(temperature,humidity, x...){ 
     return deviceSimulation(parameterList[(temperature, humidity, x...)]); 
} 

我希望later_calc函數快速訪問溫度,溼度等輸入訪問類中的結構。

+0

看了3遍,還是不明白這個問題。可能是你可以添加一些僞代碼? – SergeyA

+3

*攜帶行李的行李*那是什麼行李? – Borgleader

+0

好吧,我不知道,如果向量的額外功能將是一個性能命中......我有參數的集數,所以我猜陣列將被罰款 - 對嗎? – Anisotropic

回答

1

在我看來,你想用一個std::map與無論是std::tuple關鍵或保存參數自定義類,以及存儲的實驗結果的映射類型(這裏是double,但你也可以很容易地使用自定義Result類):

struct ParameterType 
{ 
    int temperature; 
    int humidity; 
    int x; 

    bool operator<(ParameterType const& rhs) const 
    { 
     return std::tie(temperature, humidity, x) < std::tie(rhs.temperature, rhs.humidity, rhs.x); 
    } 
}; 

using ResultType = double; 

int main() 
{ 
    std::map<ParameterType, ResultType> params; 

    params[{263, 10, 1}] = 1.0; 

    std::cout<< params[{263, 10, 1}] <<std::endl; 
} 

DEMO

,如果你想重複實驗,也就是說,如果你有相同的參數集多個結果,你可以使用多重映射。 (但你也可以使用std::vector<ResultType>的地圖)。我已經在實踐中使用一個整數值作爲重點,而

注意的是試圖使用浮點數。但是,由於舍入誤差,這些可能會導致關鍵比較中的問題。因此,最好修復小數位並將實際輸入解碼爲263.53,作爲26353