【发布时间】:2021-07-05 17:18:37
【问题描述】:
我正在查看一些关于如何为类/结构制作 unordered_set 的教程。我发现这个易于理解的代码(作为 Java 开发人员)可以解决问题:
#include <iostream>
#include <unordered_set>
using namespace std;
struct Node{
int val;
bool operator==(const Node& n) const{
return (this->val == n.val);
}
};
class HashFunction{
public:
size_t operator()(const Node& n) const{
return n.val;
}
};
int main(){
Node n1 = { 1 }, n2 = { 2 },
n3 = { 3 }, n4 = { 4 };
unordered_set<Node, HashFunction> us;
us.insert(n1);
us.insert(n2);
us.insert(n3);
us.insert(n4);
for (auto node : us){
cout << node.val << " ";
}
cout << endl;
return 0;
}
我想知道我们是否可以将struct Node 设为类,将int val 设为私有字段并将unordered_set<Node, HashFunction> neighbours 作为字段添加到Node 类。
如果没有,保持类/结构良好封装并为类设置集合/映射字段的良好做法是什么?
【问题讨论】:
-
请注意,C++ 中的
Node表示实际对象,而不是 Java 中的指针。 “邻居”集合需要多对多关系,只能用指针来实现。 -
Struct 只是一个默认对所有成员公开的类。如果您将 val 设为私有,则类 Hash 无法返回它。
-
@BenVoigt 感谢您的评论,您的意思是“邻居”集应该有一个 Node* 作为模板吗?
-
@sucksatnetworking 感谢您的评论。我现在将尝试使“节点”成为一个类。
标签: c++ design-patterns encapsulation unordered-map unordered-set