Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDocCN
TinySTL
提交
6a9c1bb4
T
TinySTL
项目概览
OpenDocCN
/
TinySTL
通知
4
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TinySTL
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
6a9c1bb4
编写于
2月 10, 2015
作者:
邹
邹晓航
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
完成to_string和重构了add_node
上级
440ba0c8
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
43 addition
and
7 deletion
+43
-7
TinySTL/Detail/Graph.impl.h
TinySTL/Detail/Graph.impl.h
+31
-6
TinySTL/Graph.h
TinySTL/Graph.h
+12
-1
未找到文件。
TinySTL/Detail/Graph.impl.h
浏览文件 @
6a9c1bb4
...
...
@@ -106,6 +106,23 @@ namespace TinySTL{
DFS
(
n
.
first
,
func
);
}
}
template
<
class
Index
,
class
Value
,
class
EqualFunc
>
string
graph
<
Index
,
Value
,
EqualFunc
>::
to_string
(){
string
str
;
std
::
ostringstream
oss
;
for
(
auto
oit
=
begin
();
oit
!=
end
();
++
oit
){
oss
<<
"["
<<
oit
->
first
<<
","
<<
oit
->
second
<<
"]"
<<
":"
;
auto
eit
=
end
(
oit
->
first
);
for
(
auto
iit
=
begin
(
oit
->
first
);
iit
!=
eit
;
++
iit
){
oss
<<
"["
<<
iit
->
first
<<
", "
<<
iit
->
second
<<
"]"
<<
"-"
;
}
oss
<<
"[NULL,NULL]"
<<
std
::
endl
<<
std
::
setw
(
4
)
<<
"|"
<<
std
::
endl
;
}
oss
<<
"[NULL,NULL]"
<<
std
::
endl
;
str
.
append
(
oss
.
str
().
c_str
());
return
str
;
}
//********************************************************************************
template
<
class
Index
,
class
Value
,
class
EqualFunc
>
inner_iterator
<
Index
,
Value
,
EqualFunc
>&
inner_iterator
<
Index
,
Value
,
EqualFunc
>::
operator
++
(){
...
...
@@ -155,17 +172,13 @@ namespace TinySTL{
template
<
class
Index
,
class
Value
,
class
EqualFunc
>
directed_graph
<
Index
,
Value
,
EqualFunc
>::
directed_graph
()
:
graph
(){}
template
<
class
Index
,
class
Value
,
class
EqualFunc
>
void
directed_graph
<
Index
,
Value
,
EqualFunc
>::
add_node
(
const
node
&
n
,
const
node_sets
&
nodes
){
if
(
!
is_contained
(
n
.
first
)){
nodes_
.
push_front
(
make_pair
(
n
,
list
<
typename
graph
::
node
>
()));
++
size_
;
}
void
directed_graph
<
Index
,
Value
,
EqualFunc
>::
add_node_helper
(
const
Index
&
index
,
const
node_sets
&
nodes
){
if
(
nodes
.
empty
())
return
;
//find node n's list
list
<
typename
graph
::
node
>*
l
;
for
(
auto
&
pair
:
nodes_
){
if
(
equal_func
(
pair
.
first
.
first
,
n
.
first
))
if
(
equal_func
(
pair
.
first
.
first
,
index
))
l
=
&
(
pair
.
second
);
}
for
(
const
auto
&
item
:
nodes
){
...
...
@@ -175,4 +188,16 @@ namespace TinySTL{
}
}
}
template
<
class
Index
,
class
Value
,
class
EqualFunc
>
void
directed_graph
<
Index
,
Value
,
EqualFunc
>::
add_node
(
const
node
&
n
,
const
node_sets
&
nodes
){
if
(
!
is_contained
(
n
.
first
)){
nodes_
.
push_front
(
make_pair
(
n
,
list
<
typename
graph
::
node
>
()));
++
size_
;
}
add_node_helper
(
n
.
first
,
nodes
);
}
template
<
class
Index
,
class
Value
,
class
EqualFunc
>
void
directed_graph
<
Index
,
Value
,
EqualFunc
>::
add_node
(
const
Index
&
index
,
const
node_sets
&
nodes
){
add_node_helper
(
index
,
nodes
);
}
}
\ No newline at end of file
TinySTL/Graph.h
浏览文件 @
6a9c1bb4
...
...
@@ -3,11 +3,14 @@
#include "Allocator.h"
#include "List.h"
#include "String.h"
#include "Unordered_set.h"
#include "Utility.h"
#include "Vector.h"
#include <functional>
#include <iomanip>
#include <sstream>
namespace
TinySTL
{
namespace
Detail
{
...
...
@@ -17,7 +20,7 @@ namespace TinySTL{
class
outter_iterator
;
template
<
class
Index
,
class
Value
,
class
EqualFunc
=
equal_to
<
Index
>
>
class
graph
{
class
graph
{
//base class
public:
friend
class
inner_iterator
<
Index
,
Value
,
EqualFunc
>
;
friend
class
outter_iterator
<
Index
,
Value
,
EqualFunc
>
;
...
...
@@ -35,7 +38,10 @@ namespace TinySTL{
graph
()
:
size_
(
0
){};
virtual
~
graph
(){
cleanup
();
};
//node can be not in the graph
virtual
void
add_node
(
const
node
&
item
,
const
node_sets
&
nodes
)
=
0
;
//node of the index must in the graph
virtual
void
add_node
(
const
Index
&
index
,
const
node_sets
&
nodes
)
=
0
;
//virtual void delte_node(const node& item) = 0;
void
DFS
(
const
Index
&
index
,
visiter_func_type
func
);
...
...
@@ -56,6 +62,8 @@ namespace TinySTL{
inline
inner_iterator
end
(
const
Index
&
index
);
inline
iterator
begin
();
inline
iterator
end
();
string
to_string
();
protected:
list
<
pair
<
node
,
list
<
node
>>>
nodes_
;
equal_func_type
equal_func
;
...
...
@@ -124,6 +132,9 @@ namespace TinySTL{
~
directed_graph
(){}
//node n -> every node in the nodes set
void
add_node
(
const
node
&
n
,
const
node_sets
&
nodes
)
override
;
void
add_node
(
const
Index
&
index
,
const
node_sets
&
nodes
)
override
;
private:
void
add_node_helper
(
const
Index
&
index
,
const
node_sets
&
nodes
);
};
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录