將C字符串用作映射鍵有什麼問題嗎?C字符串映射鍵
std::map<const char*, int> imap;
在地圖上並不重要元素的順序,所以如果他們使用std::less<const char*>
下令沒關係。
我使用Visual Studio和根據MSDN(Microsoft專用):
在某些情況下,相同的字符串文字可以被「合併」,以節省空間的可執行文件。在字符串文字池中,編譯器會將對特定字符串文字的所有引用指向內存中的相同位置,而不是將每個引用點指向字符串文字的單獨實例。
它說,他們只集中在某些情況下,所以它看起來像使用字符串字面量將是一個不錯的主意訪問地圖元素:
//Could these be referring to different map elements?
int i = imap["hello"];
int j = imap["hello"];
是否有可能超載operator==
對於const char*
使得實際C字符串而不是指針值將被用來確定地圖元素是相等的:
bool operator==(const char* a, const char* b)
{
return strcmp(a, b) == 0 ? true : false;
}
將C字符串用作映射鍵是否是個好主意?
比較器功能是錯誤的。我們需要它返回'a'是否小於'b';現在它返回「a」是否與「b」不同。 – Gorpik
@Gorpik謝謝。看起來邁克西摩也注意到了這一點,並且打敗了我們兩人進行了糾正。 – simonc
我知道比較器用於確定地圖中元素的位置,但它也用於確定兩個地圖元素是否相等?換句話說,如果你提供了一個比較器,它將被用於operator ==以確定兩個地圖元素是否相等? – user974967