排序在多地图<对<T,T>,P>

Sort on multimap<pair<T,T>,P>

本文关键字:gt lt 地图 排序      更新时间:2023-10-16

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

1>c:program filesmicrosoft visual studio 9.0vcincludexutility(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))
//
pair<T,T>& i  and pair<T,T>& j

应该是

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

(参考)

您忘记了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>已经进行了自然排序:如果有的话,您的类型T可能有一个bool operator<

排序谓词必须接受const引用。

另外,多地图不是已经排序了吗?