我在我的代码中,类Data,类Sample,类节点和类树中有四个类。通过指向父类的指针访问映射成员变量使用父类的父类的向量指针
class Data
{
private:
map<string, double> m_DataVariables;
public:
Data();
Data(const Data &data);
map<string, double> getDataVariables() const;
void setDataVariables(const map<string, double> &value);
};
class Sample
{
private:
Data *m_pData; // Pointer To The Map Of DataVariables
public:
virtual ~Sample()
{
delete m_pData;
}
Sample();
Sample(const Sample &sample);
// Data Variables
map<string, double> getDataVariables() const;
void setDataVariables(const map<string, double> &value);
};
class Node
{
private:
double m_numSamples;
vector<Sample*> m_NodeSamples;
public:
virtual ~Node()
{
}
Node();
// Number of samples for the node
double getNumSamples() const;
void setNumSamples(const double &value);
// List of Samples
vector<Sample*> getSamples() const;
void setSamples(const vector<Sample*> &value);
};
class Tree
{
private:
vector<Sample*> m_Samples;
vector<Node*> m_nodes;
public:
Tree(vector<Sample*> &Samples);
// List of Sample
vector<Sample*> getSamples() const;
void setSamples(const vector<Sample*> &value);
// List of Nodes
vector<Node*> getNodes() const;
void setNodes(const vector<Node*> &value);
// List of Names that were used in building the tree
vector<string> getPredictorNames() const;
void setPredictorNames(const vector<string> &value);
void CalcError(Node *node, const string &Name, double &error);
};
Data::Data()
{
m_DataVariables = map<string, double>();
}
map<string, double> Data::getDataVariables() const
{
return m_DataVariables;
}
Sample::Sample(const Sample &sample)
{
m_pData = new Data(); //Map of Variables
m_pData->getDataVariables() = sample.getDataVariables();
}
map<string, double> Sample::getDataVariables() const
{
return m_pData->getDataVariables();
}
double Node::getNumSamples() const
{
return m_numSamples;
}
vector<Sample*> Node::getSamples() const
{
return m_NodeSamples;
}
void Tree::Tree()
{
m_Samples = vector<Sample*>();
m_nodes = vector<Node*>();
}
vector<Sample*> Tree::getSamples() const
{
return m_Samples;
}
vector<Node*> Tree::getNodes() const
{
return m_nodes;
}
在CalcError(节点*节点,常量字符串&名,双&误差),我想为在类节点的NodeSamples每个样品,通过DataVariables地图类数据迭代和传递的名称进行比较在地图上的关键。如果名称与密钥匹配,则读取与该密钥关联的值并将其存储在一个集合中。目前我无法使用C++ 11功能。 C++ 98是我可以使用的。
在根据视觉工作室此C#是简单使用:
列表中值= node.Samples.Select(S => s.DataVariables [名称])的OrderBy(V => v)的.ToList();
但在C++中,我不确定如何完成此操作。我开始的是:
void Tree::CalcError(Node *node, const string &name, double &error)
{
vector<double> Values;
for (vector<TrainingSample*>::iterator SampleIt = node->getTrainingSamples().begin(); SampleIt != node->getTrainingSamples().end(); SampleIt++)
{
for (map<string, double>::iterator map_iter = **Not sure how to access the map....** map_iter++)
{
if (name.compare(**Not sure how to access the key in the map**) == 0)
{
Values.push_back(**Not sure how to access the value in the map**);
}
}
}
}
任何帮助将不胜感激。
你消气应该返回避免副本的const引用(以及使用相同容器的迭代器)。 – Jarod42
您不必显式构造'vector'或'map',它们的默认构造函数就足够了。 – Jarod42