无向网络类
无向网络类在 cimnet/_base_net.h
内定义,类的声明如下:
-
template<class _NId, class _NData, class _EData>
class Network -
该类包含以下类型定义:
-
typedef DirectedNetwork<_NId, _NData, _EData> _DiNetType;
类型匹配的有向网络类型。
Network
包含以下构造器:-
Network()
构造空的无向网络。
-
Network(const _DiNetType &net)
有向拷贝构造器,根据有向网络构造无向网络。
- 参数
net – 被拷贝的有向网络,任意方向的连边都能产生无向网络中的新边,双向连边仅产生一条新边。
-
~Network()
析构函数,释放空间。
-
friend std::ostream &operator<<(std::ostream &out, const Network &net)
通过输出流输出网络规模信息。对于空网络它会输出:
Network {#(node)=0, #(edge)=0, #(degree)=0}
-
_NId add_node(const _NId &id, const _NData &node_data)
向网络中添加一个节点及相应的节点数据。如果这个节点已存在,则用新的节点数据覆盖原有节点数据。
-
void add_edge(const _NId &id1, const _NId &id2, const _EData &edge_data)
向网络中添加一条边及相应的边数据。如果这条边已存在,则用新的边数据覆盖原有边数据。如果该边上的两个节点中,任意一个节点不存在,则自动使用
add_node
函数创建这个点,并用_NData
构造节点数据。- 参数
id1 – 待加入边的第一个节点编号
id2 – 待加入边的第二个节点编号
edge_data – 待加入边的边数据,如果未给定则使用
_EData
类型的默认构造器构造对象赋值。
-
void remove_edge(const _NId &id1, const _NId &id2)
从网络中移除一条边,相应边的边数据也会被清除。
- 参数
id1 – 待删除边的第一个节点编号
id2 – 待删除边的第二个节点编号
- 抛出
NoNodeException – 节点
id1
或id2
不存在NoEdgeException – 待删除边不存在
-
void remove_node(const _NId &id)
从网络中移除节点,并移除所有与其相连的边,存储在上面的节点数据也会被清除。
- 参数
id – 待加入的节点编号
- 抛出
NoNodeException – 节点
id
不存在
-
bool has_node(const _NId &id) const
判断网络中是否存在指定节点。
- 参数
id – 待判断的节点编号
- 返回
如果网络中存在节点
id
,返回 true ,否则返回 false 。
-
_NData &node(const _NId &id)
访问节点数据,可以读写。
- 参数
id – 节点编号
- 返回
节点
id
上的节点数据对象的引用- 抛出
NoNodeException – 节点
id
不存在
-
_NData get_node_data(const _NId &id) const
访问点数据的一份拷贝,修改该函数返回的变量不会改变
Network
对象存储的点数据。- 参数
id – 节点编号
- 返回
节点
id
上的节点数据对象的拷贝- 抛出
NoNodeException – 节点
id
不存在
-
_EData &edge(const _NId &id1, const _NId &id2)
访问边数据,可以读写。
- 参数
id1 – 边上第一个节点编号
id2 – 边上第二个节点编号
- 返回
- 抛出
NoNodeException – 节点
id1
或id2
不存在NoEdgeException – 节点
id1
与节点id2
间的连边不存在
-
_EData get_edge_data(const _NId &id1, const _NId &id2) const
访问边数据的一份拷贝,修改该函数返回的变量不会改变
Network
对象存储的边数据。- 参数
id1 – 边上第一个节点编号
id2 – 边上第二个节点编号
- 返回
- 抛出
NoNodeException – 节点
id1
或id2
不存在NoEdgeException – 节点
id1
与节点id2
间的连边不存在
-
int number_of_nodes() const
获取节点的总数。
- 返回
网络中所有节点的数目
-
int number_of_edges() const
获取边的总数。
- 返回
网络中所有边的数目
-
int total_degree() const
获取各节点的度之和。
- 返回
网络的总度数
-
std::vector<_NId> neighbors(const _NId &id) const
获取该节点的相邻节点的编号数组。
- 参数
id – 节点编号
- 返回
与节点
id
相邻的节点编号数组。(若该点不存在则返回空数组)
-
_NId random_neighbor(const _NId &id) const
获取该节点的一个随机邻居。
- 参数
id – 节点编号
- 返回
节点
id
的一个随机邻居- 抛出
NoNodeException – 节点
id
不存在NoNeighborsException – 节点
id
没有邻居
-
typedef DirectedNetwork<_NId, _NData, _EData> _DiNetType;