0

マルチマップをソートするソート クラスを作成しましたが、要素をマップに挿入すると、次のコンパイラ エラーが表示されます。

1>c:\program files\microsoft visual studio 9.0\vc\include\xutility(313) : error C2664: 'bool MapSort::operator ()(std::pair<_Ty1,_Ty2> &,std::pair<_Ty1,_Ty2> &)' : cannot convert parameter 1 from 'const std::pair<_Ty1,_Ty2>' to 'std::pair<_Ty1,_Ty2> &'

誰でも助けることができますか?

class MapSort
{
    public:
        MapSort();
        ~MapSort();

        public:
            bool operator() ( pair<T,T>& i, pair<T,T>& j) 
            {
                return i.first.GetID() < j.first.GetID();

            }

};


multimap < pair < T,T >,P > CurrMap;
CurrMap.insert( multimap < pair < T, T >,Metric >::value_type(make_pair< T,T >(aAttractionA,aAttractionB),CurrP))
//
4

3 に答える 3

1
pair<T,T>& i  and pair<T,T>& j

する必要があります

pair<T,T> const& i and pair<T,T> const& j

(参照)

于 2011-06-20T09:07:43.520 に答える
0

あなたは忘れましたconst- 正確さ:

bool operator()(pair<T,T> const& i, pair<T,T> const& j) const
{
    return i.first.GetID() < j.first.GetID();
}
  • この関数の何も変更可能である必要はないので、「なぜ」関数とその入力を作成しないのconstですか?

  • 実際、これはコンテナの契約によって期待されています。

さらに、ここでの独自の並べ替え順序が有効であるか、または意味があるかどうかはわかりません。確かに、完全に意図的ではないようです。すでに自然にソートされています。どちらかといえば、 for your typepair<T,T>があるかもしれません。bool operator<T

于 2011-06-20T09:05:30.330 に答える
0

ソート述語はconst参照を取る必要があります。

さらに、マルチマップは既にソートされていませんか?

于 2011-06-20T09:05:35.650 に答える