簡體   English   中英

C ++ map ::查找對作為鍵

[英]C++ map::find for pair as key

我有一對作為鍵和布爾值的映射。 當我嘗試使用map :: find方法查找已經包含的特定對時,找不到任何項目。 我做錯了什么?

我試圖實現一個比較器類,並將其設置為map中的key_comp,但是我不確定我做對了嗎。 這是解決辦法嗎?

我在VS12中工作,我在調試中附帶了一張照片,您將從中了解更多:

在此處輸入圖片說明

您所呼叫findpair<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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM