2016-10-19 41 views
2

我可以使用const char *作爲關鍵字的boost :: multimap嗎?或者其他指針有鑰匙?指針作爲multimap中的鍵

我認爲這很好。但是當我這樣做後,我插入後無法找到我的值。但是當我改變他們關鍵到一個std ::字符串它工作正常。起初我不明白。

我想過了,這就是我認爲的解釋。

當我有一個char *作爲鍵時,它將意味着該值映射到某些內存地址的值,如「0xccbbee」作爲鍵(如鍵(0xccbbee) - > value(1))。所以提取的價值,我會需要發送「0xccbbee」得到值1,我不會做。

我會嘗試通過使用存儲位置中存在的鍵(也許它是「HELLO」)來嘗試獲取值,並嘗試將值映射到「HELLO」,我什麼也得不到。這是問題嗎?

我的理解是否正確。請讓我知道我的理解是否正確。我在嘗試學習。

TIA

-R

+1

請製作一個測試用例。直覺:你使用字符串作爲鍵,並且不能保證產生相同的地址。 – krzaq

回答

3

你的問題的解釋是正確的。爲了達到理想的效果,請配置multimap以合適Comparator

struct StrCompare 
{ 
    bool operator()(const char* lhs, const char* rhs) const 
    { 
     return strcmp(lhs, rhs) < 0; 
    } 
}; 

typedef boost::multimap<const char*, whatever, StrCompare> StrToWhateverMultimap; 
+0

感謝您確認@Leon! – codeworks