在多图上排序<pair <t,t>,P&gt; </pair <t,t>

时间:2011-06-20 09:03:29

标签: c++ multimap

我编写了一个排序类来对multimap进行排序,但是当我将元素插入到map中时,会出现以下编译器错误:

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))
//

3 个答案:

答案 0 :(得分:1)

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

应该是

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

(参考)

答案 1 :(得分:0)

您忘记了const - 正确性:

bool operator()(pair<T,T> const& i, pair<T,T> const& j) const
{
    return i.first.GetID() < j.first.GetID();
}
  • 此函数中的任何内容都不需要是可变的,因此“为什么不”使函数及其输入const

  • 事实上,根据容器的合约,这是预期的

此外,我不确定您自己的排序顺序是否有效或有意义。这当然不是完全有目的的。 pair<T,T>已经自然排序:如果有的话,您的类型bool operator<可能会T

答案 2 :(得分:0)

您的排序谓词必须采用const个引用。

另外,多地图是否已经排序?