0
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)' : cannot convert parameter 1 from 'std::pair<_Ty1,_Ty2 >' から 'std::_List_const_iterator<_Mylist>' 1>

やってみた

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

しかし、それも私にエラーを与えます。入力が color と float のペアであるため、理由がわかりません

まだ問題が発生しているため、コード全体を追加しています

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
      ]
4

1 に答える 1

3

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)キーではなく、最初の引数として (パフォーマンス上の理由からのヒントとして) イテレータを取ります。

于 2013-03-30T00:14:01.723 に答える