2011-06-20 47 views
0

我寫了一個排序類排序的多重映射,但是當我插入元素融入地圖,會出現以下編譯器錯誤:排序的多重映射<pair<T,T>,P>

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

我已經格式化您的文章。請在將來閱讀FAQ和預覽窗格。 –

+0

另請參見:[嚴格弱排序](http://en.wikipedia.org/wiki/Strict_weak_ordering) – Johnsyweb

回答

0

你忘const -correctness:

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

+0

感謝您的答覆,我已通過添加「const&」相應地進行了修改,但編譯器現在剝落了「錯誤C2662:' T :: GetID':無法將'this'指針從'const T'轉換爲'T&' 1>轉換失去限定符「 –

+0

@cool:Huh?我的答案的哪一部分表示增加另一個'&'?你在哪裏添加它?這可能是錯誤的。按照我在答案中所說的去做。 –

+0

我已經添加了const,但編譯器報告了其他錯誤:錯誤C2662:'T :: GetID':無法將'this'指針從'const T'轉換爲'T&'轉換失去限定符「 –

0

您的排序謂詞必須採用const引用。

另外,是不是已經排序的多地圖?

+0

是的,但是他正在定義自己的排序順序。原則上沒有錯(儘管我在這裏並不完全相信)。 –

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

應該

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

(參考)