У меня возникают проблемы в перегрузке операторов сравнения для сравнения двух pair
-структуру таким образом:операторы сравнения перегрузки для шаблонного класса
typedef pair<string, unsigned int> INDEX;
bool operator>(INDEX &v1, INDEX &v2)
{
if(v1.second == v2.second) //if integer parts are equal
{
//string that comes earlier in the dictionary should be larger
return v1.first < v2.first;
}
return v1.second > v2.second;
}
Фактическое сравнение происходит в this->element(hole/2) < this->element(hole)
внутри fixUp(CBTNODE hole)
, функцию-член класса BinaryHeap
, который является производным классом CompleteBinaryTree
. T
будет создан как тип INDEX
, который является typedef
ed как pair<string, unsigned int>
.
Другими словами, сравнение между двумя парами: («a.txt», 42)> («b.txt», 42) должно возвращать значение true.
Я попытался перегружать operator>
вне объявления класса в двух разных направлениях, но ни один из них работал:
bool operator>(INDEX &v1, INDEX &v2);
bool operator>(BinaryHeap<T> &v1, BinaryHeap<T> &v2);
Любая помощь будет высоко ценится!
Z.Zen
Вот заявление:
typedef int CBTNODE;
template <typename T>
class CompleteBinaryTree {
public:
//Initializes an empty binary tree
CompleteBinaryTree(int initialSize = 10);
//Destructor
~CompleteBinaryTree();
//Returns the element of the CBT pointed to by node. Behavior is undefined
//if node does not exist.
T element(CBTNODE node);
protected:
T *data;
int numElts, maxElts;
};
typedef pair<string, unsigned int> INDEX;
template <typename T>
class BinaryHeap : public CompleteBinaryTree<T>
{
public:
//Maintain heap property with bottom up heapify method.
void fixUp(CBTNODE hole);
};
bool operator>(INDEX &v1, INDEX &v2);
Реализация:
template <typename T>
T CompleteBinaryTree<T>::element(CBTNODE node) {
assert(node >= 0);
assert(node < numElts);
return data[node];
}
template <typename T>
void BinaryHeap<T>::fixUp(CBTNODE hole)
{
T tmp = this->element(hole);
while(hole > 0 && this->element(hole/2) < tmp)
{
//do stuff
}
}
bool operator>(INDEX &v1, INDEX &v2)
{
if(v1.second == v2.second) //if two have same relevance
{
return v1.first < v2.first;
}
return v1.second > v2.second;
}
какая ошибка вы получаете и на какой линии? – Chubsdad
Есть ли настоящая необходимость в определении «bool operator» (INDEX & v1, INDEX &v2);). Не имеет пары классов с операторами сравнения? – Chubsdad
Он скомпилирован, но не сделал того, что он должен был делать. Я создал тестовый пример, делает сравнение: пара <'a', 42>> пара <'b', 42>, и она возвращает false, которая должна возвращать true согласно моему определению.Первый элемент пары - строка C++, а второй - int. –