2011-03-21 88 views
1

我試圖弄清楚以下問題的最優實現:什麼數據結構用於對象的評估順序?

比方說,我們有一個類A代表一個複雜的數學對象,並在建設初期持有所有需要的內在狀態。對於A的每個對象a_i,可以計算最終數值,該數值取決於其他a_jj < i的非平凡方式,並且a_0是已知的。此外,導致最終答案的公式需要特殊的評估順序,並且可以定義a_i的比較運算符。

我想要做的是首先創建所有需要的a_i,將它們推入一些有序數據結構,最後以正確的順序遍歷結構以獲得最終結果。

現在到了真正的問題:我使用哪種數據結構來以一般方式實現評估順序結構?二進制堆?或者我只是簡單地使用std :: vector並在之後進行排序?

謝謝!

+0

這個問題太抽象了,我不能提供具體的答案。但是,std :: set或std :: multiset可能是您的問題的良好數據結構。 – 2011-03-21 16:42:05

回答

1

如果可以根據評估順序定義a_i的比較運算符(比如小於),那麼自然容器就是std :: set。使用std :: set :: iterator遍歷映射將按遞增順序產生每個a_i,這將是您的評估順序。例如。

std::set<A> aMap; 
A a_i; 
... // You create the rest of the A's 
aMap.insert(a_i); 
aMap.insert(a_j); 

for (std::set<A>::iterator aIter = aMap.begin(); aIter != aMap.end(); ++aIter) { 
    // Do your evaluation 
} 
0

我會推薦使用矢量,以及交換功能。如果數學公式返回true,則遍歷數組中的每個元素並與數組中的前一個元素交換。

您的循環將不得不循環遍歷向量中的每個元素,並且還有一個循環,通過循環遍歷當前索引的向量項之前的所有元素。這個內部循環將包含你的數學公式檢查,即排序邏輯。

希望這可以讓你知道該怎麼做。如果你需要一些僞代碼,給我發一條評論。