我使用類型Id
其在我正在使用的代碼的另一部分來定義:如何使用未知(int-like)類型作爲std :: vector的索引?
typedef int Id;
現在我提供許多對象,其每一個都帶有這樣的Id
,我想使用Id
作爲存儲這些對象的std::vector
的索引。它可能是這個樣子:
std::vector<SomeObj*> vec(size);
std::pair<Id, SomeObj*> p = GetNext();
vec[p.first] = p.second;
的問題是,std::vector
使用自己的類型索引其內容:(?爲什麼不是模板)std::vector::size_type
。
嚴格來說,使用std::map<Id, SomObj*>
會更好,但效率會更低,並且我在這裏確實需要一個數組(我知道所有對象的索引都是連續的,並以0
開頭)。另一個問題是,typedef int Id
可能在未來變成typedef long int Id
或類似的...(這是我自己的代碼的一部分,但我控制它,但理想情況下,我應該允許在某些點更改typedef
;這是一個什麼typedef是)。
你會如何處理這個問題?也許使用unordered_map<Id, SomeObj*>
,其中散列函數直接使用Id
作爲散列鍵?這會降低內存效率嗎? (我並不完全理解unordered_map
是如何分配空間的,因爲散列函數的範圍事先是未知的?)
您錯過了最後一段中的反引號。 – mkb 2010-09-22 15:25:40
好的,謝謝,修正。 – Frank 2010-09-22 15:26:40