gpt4 book ai didi

c++ - 我可以将一个类的属性分组到一张 map 中吗?

转载 作者:行者123 更新时间:2023-11-30 02:15:08 27 4
gpt4 key购买 nike

如果我有类“node”,并希望包括所有可能的(比如 int)属性。将它们分组到一张 map 上是很好的解决方案。所以改为:

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

编辑:这样做的原因是,在转换图时,在算法中间的某个地方需要一些局部属性(比如在某些遍历期间访问过,或者是否标记过),但这些局部属性并不代表图的固有属性节点,并且在输出中不需要。此外,有时我需要多个“isVisited”变量。

还有一个原因是让“节点”类保持通用,并为最终可能需要的新属性开放。

最佳答案

您给出的示例给人的印象是任何节点都将具有所有您提供的属性(colourisVisited重量)。如果是这样,(通常)最好保留您开始时使用的原始类(class)。

不过,在某些情况下, map (或者可能更确切地说是 std::unordered_map)可能更优越;举几个例子:

  • 您有大量可能的(但预定义的)属性,每个节点只需要一个相当小的子集。可能枚举更适合作为键。
  • 您想要/需要存储编译时未知的任意属性。
  • 每个节点都有相同的属性,但您主要通过用户输入访问它们;那么特别是 unordered_map 可能比(可能很长)if-else-chain 更快。

最后,一切都取决于用例......

对于作为键的字符串可能是 trie也可能是一个有趣的选择。

关于c++ - 我可以将一个类的属性分组到一张 map 中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56562160/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com