Опубликованный код не компилировался, но когда я пытался его скомпилировать, я заметил, что вы, вероятно, хотите:
order.push_back(std::make_pair(level, root -> value));
Также:
int max_level = order[order.size() - 1]. first;
Эта ваша исправленная версия компилирует для меня:
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
class T
{};
template <class T> class Node
{
public:
T value;
Node<T>* left;
Node<T>* right;
};
Node<T>* root_;
bool sortlevel(pair<int, T> a, pair<int, T> b){
return a.first < b.first;
}
void get_level(Node<T> * root, vector <pair<int, T> > & order, int level = 0){
// changes the tree to a vector
if (root){
order.push_back(std::make_pair(level, root -> value));
get_level(root -> left, order, level + 1);
get_level(root -> right, order, level + 1);
}
}
void level_order(ostream & ostr ) {
vector<pair<int, T> > order;
get_level(root_, order);
sort(order.begin(), order.end(), sortlevel);
int max_level = order[order.size() - 1]. first;
int x = 0;
int current_level = order[x].first;
while (x < order.size()){
for(int y = 0; y < current_level - x; y++)
cout << "\t";
while (order[x]. first == current_level){
// cout << order[x]. second << " ";
x++;
}
}
}
Эта часть вышла до того, как был опубликован полный код, но все еще может быть полезна для кого-то, пытающегося выяснить сортировку, поэтому я буду держать ее: Обычно для сортировки вам может потребоваться предоставить способ сравнения пар, например, см. Здесь: http://www.cplusplus.com/reference/algorithm/sort/
Если вы используете алгоритм сортировки, он будет работать автоматически для всего, что имеет оператор меньше чемопределяется, но не для других типов.
std :: pair должен обеспечивать значение по умолчанию меньше оператора, поэтому, возможно, есть другая проблема - можем ли мы увидеть код?Как отмечает Томалак, это, вероятно, потому, что у вас нет возможности сравнивать T.