簡體   English   中英

配對鍵出現Unordered.map插入問題

[英]Unordered.map insert issue with pair keys

std::unordered_map<std::pair<Gdiplus::Color, float>, std::shared_ptr<Gdiplus::Pen>> mymap;
input = std::make_pair(color, width);

當我嘗試去做

mymap.insert(std::make_pair(color,width), pen);

我得到C2664:'std :: _ List_iterator <_Mylist> std :: _ Hash <_Traits> :: insert&>(std :: _ List_const_iterator <_Mylist>,_ Valty)':無法從'std :: pair <_Ty1,_Ty2轉換參數1 >'到'std :: _ List_const_iterator <_Mylist>'1>

我試着做

mymap.insert(std::make_pair(input,pen)) 

但這也給我一個錯誤。 我不明白為什么因為輸入是一對顏色和浮點數

我要添加整個代碼,因為我仍然遇到問題

std::unordered_map<std::pair<Gdiplus::Color, float>, std::shared_ptr<Gdiplus::Pen>> mymap;
std::shared_ptr<Gdiplus::Pen> getPen(Gdiplus::Color const & color, float width )
{   
    std::pair<Gdiplus::Color,float> input;
    input = std::make_pair(color, width);
    std::unordered_map<std::pair<Gdiplus::Color, float>, std::shared_ptr<Gdiplus::Pen>>::const_iterator got = mymap.find (input);

        if ( got == mymap.end() )
        {
            auto pen = std::make_shared<Gdiplus::Pen> ();
            pen->SetColor(color);
            pen->SetWidth(width);
            //std::pair<Gdiplus::Color,float> input2;
            mymap.insert(std::make_pair(input, pen));
            return pen;             
        }       
        else
        {
            if (std::shared_ptr<Gdiplus::Pen> m_pen = got->second)
               return m_Pen;
        }

}

};

 error C2440: 'type cast' : cannot convert from 'const std::pair<_Ty1,_Ty2>' to 'size_t'   with
       [
          _Ty1=Gdiplus::Color,
          _Ty2=float
      ]

使用emplace(key, value)insert(pair)

mymap.emplace(std::make_pair(color, width), pen);
mymap.insert(std::make_pair(std::make_pair(color, width), pen));

insert(it, pair)將迭代器作為其第一個參數(出於性能原因的提示),而不是鍵。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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