如果我有“节点”类,并希望包括所有可能的(例如int)属性。将它们分组到一个地图中是一个好的解决方案。 因此,相反:
class node{
int color;
int isVisited;
int weight;
public:
};
拥有
class node{
map<string, int> property;
public:
setProperty(string property_label, int property_value)
{property[propery_label] = property_value;};
};
int main(){
node n;
n.setProperty("color",int(color::red));
n.setProperty("isVisited", 1);
n.setProperty("weight", 12);
}
编辑: 这样做的原因是,在变换图形时,在算法中间需要某个局部属性(例如在遍历过程中被访问或被标记),但是这些局部属性并不表示a的固有属性。节点,并且在输出中不需要。另外,有时我需要多个“ isVisited”变量。
另一个原因是保持类“节点”的通用性并为最终可能需要的新属性打开。
答案 0 :(得分:3)
您给出的示例给人的印象是 any 节点将具有您提供的 all 属性(colour
,isVisited
,{{1 }})。如果是这样,通常最好保留开始时使用的原始课程。
在某些情况下,地图(或更可能是weight
)可能会更好。只是几个例子:
std::unordered_map
可能比(可能很长)if-else链更快。最后,一切都取决于用例...
对于字符串作为键,trie也可能是一个有趣的选择。
答案 1 :(得分:0)
class
(与struct
相同,除了它默认为private
访问而不是public
)主要是将数据和/或功能元素组合在一起。 / p>
您node
似乎只是将三个元素组合在一起。因此,您可能想从以下简单的内容开始:
struct node // access is public by default
{
int color;
int isVisited; // maybe a bool rather than int?
int weight;
}
...
node myNode;
myNode.color = ...
...
std::cout << myNode.weight;