[英]C++ map::find for pair as key
我有一對作為鍵和布爾值的映射。 當我嘗試使用map :: find方法查找已經包含的特定對時,找不到任何項目。 我做錯了什么?
我試圖實現一個比較器類,並將其設置為map中的key_comp,但是我不確定我做對了嗎。 這是解決辦法嗎?
我在VS12中工作,我在調試中附帶了一張照片,您將從中了解更多:
您所呼叫find
與pair<char *, char*>(0x00ffc468, 0x00ffbdb0)
集合中沒有這樣的對,所以find
返回end
。
您的代碼將比較char *
,后者檢查它們是否指向內存中的同一位置,而不是它們是否指向相同的內容。 您可能應該使用std::string
代替char *
而不是重新發明wheel。
這是一個可能的比較函數示例,如果您堅持這樣做,可以使用它:
bool less(
std::pair<char *, char *> const& p1,
std::pair<char *, char *> const& p2)
{
int i = strcmp (p1.first, p2.first);
if (i < 0)
return true;
if (i > 0)
return false;
return strcmp (p1.second, p2.second) < 0;
}
如果必須在地圖中使用std:pair<char*, char*>
作為鍵,則在創建地圖時可以使用以下函子。
struct MyCompare
{
bool operator()(std::pair<char const*, char const*> const& lhs,
std::pair<char const*, char const*> const& rhs)
{
int n1 = strcmp(lhs.first, rhs.first);
if ( n1 != 0 )
{
return n1 < 0;
}
return (strcmp(lhs.second, rhs.second) < 0);
}
};
typedef std::map<std::pair<char*,char*>, int, MyCompare> MyMap;
MyMap myMap;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.