完成to_string和重构了add_node
This commit is contained in:
@@ -106,6 +106,23 @@ namespace TinySTL{
|
|||||||
DFS(n.first, func);
|
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>
|
template<class Index, class Value, class EqualFunc>
|
||||||
inner_iterator<Index, Value, EqualFunc>& inner_iterator<Index, Value, EqualFunc>::operator ++(){
|
inner_iterator<Index, Value, EqualFunc>& inner_iterator<Index, Value, EqualFunc>::operator ++(){
|
||||||
@@ -155,17 +172,13 @@ namespace TinySTL{
|
|||||||
template<class Index, class Value, class EqualFunc>
|
template<class Index, class Value, class EqualFunc>
|
||||||
directed_graph<Index, Value, EqualFunc>::directed_graph():graph(){}
|
directed_graph<Index, Value, EqualFunc>::directed_graph():graph(){}
|
||||||
template<class Index, class Value, class EqualFunc>
|
template<class Index, class Value, class EqualFunc>
|
||||||
void directed_graph<Index, Value, EqualFunc>::add_node(const node& n, const node_sets& nodes){
|
void directed_graph<Index, Value, EqualFunc>::add_node_helper(const Index& index, const node_sets& nodes){
|
||||||
if (!is_contained(n.first)){
|
|
||||||
nodes_.push_front(make_pair(n, list<typename graph::node>()));
|
|
||||||
++size_;
|
|
||||||
}
|
|
||||||
if (nodes.empty())
|
if (nodes.empty())
|
||||||
return;
|
return;
|
||||||
//find node n's list
|
//find node n's list
|
||||||
list<typename graph::node>* l;
|
list<typename graph::node>* l;
|
||||||
for (auto& pair : nodes_){
|
for (auto& pair : nodes_){
|
||||||
if (equal_func(pair.first.first, n.first))
|
if (equal_func(pair.first.first, index))
|
||||||
l = &(pair.second);
|
l = &(pair.second);
|
||||||
}
|
}
|
||||||
for (const auto& item : nodes){
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -3,11 +3,14 @@
|
|||||||
|
|
||||||
#include "Allocator.h"
|
#include "Allocator.h"
|
||||||
#include "List.h"
|
#include "List.h"
|
||||||
|
#include "String.h"
|
||||||
#include "Unordered_set.h"
|
#include "Unordered_set.h"
|
||||||
#include "Utility.h"
|
#include "Utility.h"
|
||||||
#include "Vector.h"
|
#include "Vector.h"
|
||||||
|
|
||||||
#include <functional>
|
#include <functional>
|
||||||
|
#include <iomanip>
|
||||||
|
#include <sstream>
|
||||||
|
|
||||||
namespace TinySTL{
|
namespace TinySTL{
|
||||||
namespace Detail{
|
namespace Detail{
|
||||||
@@ -17,7 +20,7 @@ namespace TinySTL{
|
|||||||
class outter_iterator;
|
class outter_iterator;
|
||||||
|
|
||||||
template<class Index, class Value, class EqualFunc = equal_to<Index>>
|
template<class Index, class Value, class EqualFunc = equal_to<Index>>
|
||||||
class graph{
|
class graph{//base class
|
||||||
public:
|
public:
|
||||||
friend class inner_iterator < Index, Value, EqualFunc >;
|
friend class inner_iterator < Index, Value, EqualFunc >;
|
||||||
friend class outter_iterator < Index, Value, EqualFunc > ;
|
friend class outter_iterator < Index, Value, EqualFunc > ;
|
||||||
@@ -35,7 +38,10 @@ namespace TinySTL{
|
|||||||
graph() :size_(0){};
|
graph() :size_(0){};
|
||||||
virtual ~graph(){ cleanup(); };
|
virtual ~graph(){ cleanup(); };
|
||||||
|
|
||||||
|
//node can be not in the graph
|
||||||
virtual void add_node(const node& item, const node_sets& nodes) = 0;
|
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;
|
//virtual void delte_node(const node& item) = 0;
|
||||||
|
|
||||||
void DFS(const Index& index, visiter_func_type func);
|
void DFS(const Index& index, visiter_func_type func);
|
||||||
@@ -56,6 +62,8 @@ namespace TinySTL{
|
|||||||
inline inner_iterator end(const Index& index);
|
inline inner_iterator end(const Index& index);
|
||||||
inline iterator begin();
|
inline iterator begin();
|
||||||
inline iterator end();
|
inline iterator end();
|
||||||
|
|
||||||
|
string to_string();
|
||||||
protected:
|
protected:
|
||||||
list<pair<node, list<node>>> nodes_;
|
list<pair<node, list<node>>> nodes_;
|
||||||
equal_func_type equal_func;
|
equal_func_type equal_func;
|
||||||
@@ -124,6 +132,9 @@ namespace TinySTL{
|
|||||||
~directed_graph(){}
|
~directed_graph(){}
|
||||||
//node n -> every node in the nodes set
|
//node n -> every node in the nodes set
|
||||||
void add_node(const node& n, const node_sets& nodes) override;
|
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);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user