Ваш вектор не изменяется, когда вы делаете это: binaryTree.at(index) = *tree;
Сделайте push_back()
, затем попробуйте отсортировать
binaryTree.push_back(*tree;)
std::sort(binaryTree.begin(),binaryTree.end(),[](const Node& n1, const Node& n2){//do your comparations});
Или просто используйте std::set
Если вы хотите работать с std :: vector без сбоев, тогда ваша вставка () должна выглядеть так:
void BST::insert()
{
int ID;
int AGE;
string NAME;
cout << "Please enter the ID number, age and name" << endl;
cin >> ID >> AGE >> NAME;
//Node *tree = new Node(ID, AGE, NAME); // Don't use new here, there is no need in this
Node tree(ID, AGE, NAME);
binaryTree.push_back(tree);
std::sort(binaryTree.begin(), binaryTree.end(), [](const Node& n1, const Node& n2)
{
//compare your nodes here
return (n1.ID > n2.ID);
});
cout << "Added! Size: " << binaryTree.size() << endl;
cout << " " << endl;
start();
}
Но это не будет двоичным деревом. Вам нужна другая структура данных для создания двоичного дерева, std::vector
не может быть двоичным деревом.
Для вас есть готовое решение, посмотрите на std::set
, оно вставляет элементы, как вам нужно, вам нужно добавить свою пользовательскую функцию сравнения в std::set
, и все будет хорошо.
Вот пример std::set
для вас:
class Node
{
public:
Node(int id):ID(id){}
int ID;
};
class NodeComparator
{
public:
bool operator()(const Node& n1,const Node& n2)
{
return n1.ID < n2.ID;
}
};
int main()
{
std::set<Node, NodeComparator> set1;
set1.insert(10);
set1.insert(8);
set1.insert(14);
set1.insert(2);
return 0;
}
Вот что вам нужно, std::set
отсортировано по возрастанию: