提交 6a9c1bb4 编写于 作者: 邹晓航

完成to_string和重构了add_node

上级 440ba0c8
......@@ -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
......@@ -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.
先完成此消息的编辑!
想要评论请 注册