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