Вы объявляете начальный размер std :: vector в его конструкторе, поэтому вы можете сделать это одним из следующих способов:
struct element
{
char ulica[10];
std::vector<int> dane;
int wolne;
int w;
element *lewy, *prawy, *ojciec;
element() : dane(3) {}
};
Если вы не включите конструктор, начальный размер вектора будет равен 0. В любом случае, чтобы добавить элемент в конец, просто используйте tmp2->dane.push_back(number);
. Это добавит значение в number
к задняя часть вектора tmp2->dane
, что может привести к изменению объема выделенной памяти для экземпляра вектора.
ОБНОВЛЕНИЕ : На основании комментария от ОП, ему нужно три вектора, попробуйте это:
struct element
{
char ulica[10];
std::vector<std::vector<int> > dane;
int wolne;
int w;
element *lewy, *prawy, *ojciec;
element() : dane(3) {}
};
Чтобы добавить элементы в векторы, просто используйте tmp2->dane[i].push_back(number)
, где i
- это индекс используемого вектора, а number
- это новое число, добавляемое к i
th vector, то же самое соглашение, которое вы, кажется, используете в своем фрагменте кода выше.
Обновление 2 : Основываясь на дополнительной информации, представленной ниже, я думаю, что необходима перестройка вашей структуры данных. Вы смешиваете значение различных компонентов и, более четко разграничив функции элемента данных и управления структурой данных AVL, вы сможете более четко различать эти два компонента. Так что попробуйте это вместо. Иметь структуру данных специально для части «value» ваших узлов дерева, например:
struct house
{
int house_number;
int unique_value0;
int unique_value1;
house(int hn, int uv0, int uv2)
: house_number(hn),
unique_value0(uv0),
unique_value1(uv1) {}
};
template <typename VALUE> struct node
{
std::string key;
std::vector<VALUE> values;
int left, right;
node<VALUE> *leftNode, *rightNode, *parentNode;
};
Отсюда вы создаете корневой узел:
node<house> *root;
Когда вы хотите добавить дом на улицу, node<house> *s
, все, что вам нужно сделать, это
s->values.push_back(house(a, b, c));
Конечно, лучшая альтернатива - использовать то, что C ++ уже имеет для этого. То есть в стандартной библиотеке есть структура под названием std :: multimap , которая в значительной степени выполняет то, что вы пытаетесь сделать. В этом случае вы можете просто объявить
std::multimap<std::string, house> myMap;
Это, вероятно, не будет использовать балансировку AVL. Скорее всего, это будет красно-черное дерево, но все это сделано для вас.