2010-04-23 66 views

回答

9

的對將使用所述一對operator<(默認比較操作std::map),其

返回訂購:x.first < y.first || (!(y.first < x.first) && x.second < y.second)

(C++ 03,20.2.2/6)

請注意,它可能會使用一對作爲映射關鍵點,特別是使用映射迭代器(it->first.first獲取密鑰對的第一個元素看起來很荒謬)時會引起混淆。但是在某些情況下,它可能比爲密鑰創建一個全新的結構更簡單。

和所有的東西一樣,小心使用,如果它不直截了當並且容易理解,最好找到一種不同的方式來做到這一點。

+0

感謝您的回覆! – jm1234567890 2010-04-23 02:22:03

1

您可以。在我看來,儘管你應該做一些比這更富有表現力的事情,因爲std::pair並不意味着這一點。例如,如果你想通過自己的哈希存儲在地圖的字符串,那麼你可以這樣做:

struct Hash { 
    int hash_low; 
    int hash_high; 

    bool operator<(const Hash& other) const; 
}; 

然後用map<Hash,string>而非map<pair<int,int>,string>

+0

也許一個簡單的「typedef對哈希」就足夠了?我無法想象這對類的效率遠低於結構... – 2010-04-23 02:19:55

+0

這不是效率,它的表現力。不管你爲什麼工作:一個'typedef',一個'struct',不管。當你編寫一個庫時,你使用'pair'這樣的東西,而不是具體的,單一用途的代碼。 – wilhelmtell 2010-04-23 06:06:43

1

如果你正在尋找散列表的兩個索引,那麼你應該看看Boost::multiindex容器。

至於回答你的問題,爲什麼不解決別人指出的限制。我一直在尋求任何清晰,易於使用,並且適合手頭問題的解決方案。

相關問題