我有下面的類似於在priority_queue使用:C++編譯錯誤在priority_queue模板
class People
{
public :
People(int iage,char *n)
{
age = iage ;
strcpy(name,n) ;
}
bool operator >(People& m)
{
return((this->age) > m.getage()) ;
}
int getage() {return age;}
char* getname() {return name;}
private :
int age ;
char name[28] ;
} ;
的priority_queue是這樣的:
template <typename T>
class Compare{
public:
bool operator()(const pair<T,int> &lhs,const pair<T,int> &rhs) const{
//return ((lhs.first) > (rhs.first)) ;
T t1 = lhs.first ;
T t2 = rhs.first ;
return (t1 > t2) ;
}
} ;
template <typename T>
vector<T> merge_arrays(const vector<vector<T> > &S)
{
priority_queue<pair<T,int>,vector<pair<T,int> >,Compare<T> > min_heap;
......
}
在main():
int main()
{
vector<People> v1 ;
vector<People> v2 ;
vector<People> v3 ;
vector<vector<People> > vx ;
char namex[3][20] = {"People1","People2","People3"} ;
for(int idx=0;idx<30;idx++)
{
if((idx%3)==0)
v1.emplace_back(idx,namex[0]) ;
else if((idx%3)==1)
v2.emplace_back(idx,namex[1]) ;
else
v3.emplace_back(idx,namex[2]) ;
}//for
vx.push_back(v1) ;
vx.push_back(v2) ;
vx.push_back(v3) ;
vector<People> v = merge_arrays<People>(vx) ;
....
}
問題是在比較中,原始來源是:
template <typename T>
class Compare{
public:
bool operator()(const pair<T,int> &lhs,const pair<T,int> &rhs) const{
return ((lhs.first) > (rhs.first)) ;
}
} ;
這將編譯錯誤,所以我將此源更改爲以下並工作!
template <typename T>
class Compare{
public:
bool operator()(const pair<T,int> &lhs,const pair<T,int> &rhs) const{
T t1 = lhs.first ;
T t2 = rhs.first ;
return (t1 > t2) ;
}
} ;
雖然問題沒了,我還是想知道,如果什麼事我能爲這個測試 這樣做是沒有必要與T T1 = lhs.first; T t2 = rhs.first;仍然使這個功能起作用!
任何意見,建議表示讚賞!
隨機想法...如果您將lhs.first和rhs.first轉換爲(T)lhs.first和(T)rhs.first ..並執行類似return(T)lhs.first>(T) rhs.first?只是一個猜測沒有保證:) –
@Josh,謝謝,添加(T)仍然得到編譯錯誤! – barfatchen
奇怪...我一直在盯着它,我沒有其他想法lol –