C++ 向量不';不能在结构中工作

C++ 向量不';不能在结构中工作,c++,vector,struct,add,C++,Vector,Struct,Add,我有这样的结构: struct element{ char ulica[10]; vector<int> dane[3]; int wolne; int w; element *lewy, *prawy, *ojciec; }; 编辑。这是我给这个向量加上一个值的代码,它是函数的一半,因为secod的一半是关于AVL中的旋转 void wstaw_wezel(){ element *tmp2; //tmp2 bedzie ojcem nowo wstawionego el

我有这样的结构:

struct element{
char ulica[10];
vector<int> dane[3];
int wolne;
int w;
element *lewy, *prawy, *ojciec;
};
编辑。这是我给这个向量加上一个值的代码,它是函数的一半,因为secod的一半是关于AVL中的旋转

void wstaw_wezel(){

    element *tmp2; //tmp2 bedzie ojcem nowo wstawionego elementu
    tmp2=korzen;
    while(tmp2!=NULL){
    if(strcmp(tmp2->ulica, tmp->ulica)<0){
        if(tmp2->prawy!=NULL){
            tmp2=tmp2->prawy;
        }
        else{
            tmp->ojciec=tmp2;
            tmp2->prawy=tmp;
            cout<<"Wstawiam pod prawy "<<tmp2->ulica<<endl;
            if(tmp2->w!=0) tmp2->w=0;
            else tmp2->w=-1;
            break;
        }
    }
    else if(strcmp(tmp2->ulica, tmp->ulica)>0){
        if(tmp2->lewy!=NULL){
            tmp2=tmp2->lewy;
        }
        else{

            tmp->ojciec=tmp2;
            tmp2->lewy=tmp;
            if(tmp2->w!=0) tmp2->w=0;
            else tmp2->w=1;
            cout<<"Wstawiam pod lewy "<<tmp2->ulica<<endl;
            break;
        }
    }
    else{
        cout<<"2 bloki na tej samej ulicy"<<endl;
        for(int i=0; i<tmp2->dane[0].size(); i++) cout<<tmp2->ulica<<" "<<tmp2->dane[0][i]<<endl;
        tmp2->numery.push_back(tmp->numery[0]);
        tmp2->dane[0].push_back(tmp->dane[0][0]);
        for(int i=0; i<tmp2->dane[0].size(); i++) cout<<tmp2->ulica<<" "<<tmp2->dane[0][i]<<endl;
        tmp2->dane[1].push_back(tmp->dane[1][0]);
        tmp2->dane[2].push_back(tmp->dane[2][0]);
        tmp2->wolne+=tmp->dane[2][0];
        break;

    }
    }
    if(tmp->ojciec==NULL){
         korzen=tmp;
         return;
    }
void wstaw_wezel(){
元素*tmp2;//tmp2 bedzie ojcem nowo wstawionego元素
tmp2=korzen;
while(tmp2!=NULL){
如果(strcmp(tmp2->ulica,tmp->ulica)prawy!=NULL){
tmp2=tmp2->prawy;
}
否则{
tmp->ojciec=tmp2;
tmp2->prawy=tmp;
coutulica)>0){
如果(tmp2->lewy!=NULL){
tmp2=tmp2->lewy;
}
否则{
tmp->ojciec=tmp2;
tmp2->lewy=tmp;
如果(tmp2->w!=0)tmp2->w=0;
否则tmp2->w=1;

您可以在其构造函数中声明std::vector的初始大小,因此实现这一点的一种方法是:

struct element
{
    char ulica[10];
    std::vector<int> dane;
    int wolne;
    int w;
    element *lewy, *prawy, *ojciec;

    element() : dane(3) {}
};
要将元素添加到向量中,只需使用
tmp2->dane[i]。向后推(number)
,其中
i
是要使用的向量的索引,
number
是要添加到
i
th向量中的新数字,这与您在上面的代码段中似乎使用的惯例相同

更新2:根据下面的附加信息,我认为需要重新设计您的数据结构。您正在混合各种组件的含义,通过更清楚地描述数据元素和AVL数据结构管理的功能,您将能够更清楚地区分两者。因此,尝试以下方法d、 为树节点的“值”部分专门设置一个数据结构,如下所示:

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;
};

这可能不会使用AVL平衡。它更可能是一棵红黑树,但这一切都为您完成。

如何分配struct元素?,
向量dane[3];
已成功初始化,但其内部向量尚未初始化

尝试将ctor方法添加到
结构元素

struct element 
{
    char ulica[10];
    vector<int> dane[3];
    int wolne;
    int w;
    element *lewy, *prawy, *ojciec;

    element()
    {
        dane[0] = vector<int>();
        dane[1] = vector<int>();
        dane[2] = vector<int>();
    }
};
struct元素
{
charulica[10];
向量丹麦文[3];
内沃恩;
int w;
元素*lewy、*prawy、*ojciec;
元素()
{
dane[0]=向量();
dane[1]=向量();
dane[2]=向量();
}
};

“不起作用”有点含糊不清。错误是什么?你真的需要向量数组吗?发布一个描述问题的最小代码示例。请发布你提到的循环。你可能需要像vector dane这样的东西;以及像tmp2->dane这样的东西。推回(数字)添加了循环。我需要和向量数组,而不是总大小为3的向量。没有任何更改。对于此值:“a 1”“a 2”“a 3”“a 4”,a是一个键,数字是int加上push_后打印出来的:a 1、a 1 a 2、a 2 a 3、a 3 a 4,在程序结束之前,主要是打印a 4。那么看起来问题不在向量上,但在某些逻辑中不是o你是如何使用向量的。因此,如果能看到对你的问题进行另一次编辑会很有用,它能更清楚地描述你期望的输出以及它与你看到的输出的区别。我可以发送一个完整的代码,但它大约有500行+一个txt文件。但是逻辑呢?我制作一个向量,使用4-5次推回,然后打印整个向量。所以,我我不清楚你希望从你的结果中看到什么。你说有问题,但你需要清楚地说明你对该计划的期望是什么,以及它的实际行为与你的期望有何不同。在前面的评论中,你提供了一些输入和输出。这是我要寻找的部分。另一部分应该是描述该输出与您期望的不同之处。该输入的输出应该是什么?您只是期望输出与输入相同吗?@lisek:还有一件事。我真的看不到您的代码中使用三个向量试图实现什么。当给定键有多个值时,为什么不能您只需将重复项存储到单个向量中(如果愿意,可以对其进行排序)?事实上,如果您只将特定键的所有值存储在向量中,而不区分单个键何时有多个值,则会大大简化代码。始终假定将有多个值。
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;
std::multimap<std::string, house> myMap;
struct element 
{
    char ulica[10];
    vector<int> dane[3];
    int wolne;
    int w;
    element *lewy, *prawy, *ojciec;

    element()
    {
        dane[0] = vector<int>();
        dane[1] = vector<int>();
        dane[2] = vector<int>();
    }
};