Dense is dense and sparse is sparse

This commit is contained in:
Dennis Luxen 2010-08-07 12:25:45 +00:00
parent 5a67a79569
commit d07dd71078
2 changed files with 23 additions and 3 deletions

View File

@ -28,6 +28,7 @@ or see http://www.gnu.org/licenses/agpl.txt.
#include <algorithm> #include <algorithm>
#include <map> #include <map>
#include <google/dense_hash_map> #include <google/dense_hash_map>
#include <google/sparse_hash_map>
template< typename NodeID, typename Key > template< typename NodeID, typename Key >
class ArrayStorage { class ArrayStorage {
@ -70,10 +71,10 @@ private:
}; };
template< typename NodeID, typename Key > template< typename NodeID, typename Key >
class SparseStorage { class DenseStorage {
public: public:
SparseStorage( size_t size = 0 ) { nodes.set_empty_key(UINT_MAX); } DenseStorage( size_t size = 0 ) { nodes.set_empty_key(UINT_MAX); }
Key &operator[]( NodeID node ) { Key &operator[]( NodeID node ) {
return nodes[node]; return nodes[node];
@ -87,6 +88,25 @@ private:
google::dense_hash_map< NodeID, Key > nodes; google::dense_hash_map< NodeID, Key > nodes;
}; };
template< typename NodeID, typename Key >
class SparseStorage {
public:
SparseStorage( size_t size = 0 ) { }
Key &operator[]( NodeID node ) {
return nodes[node];
}
void Clear() {
nodes.clear();
}
private:
google::sparse_hash_map< NodeID, Key > nodes;
};
template < typename NodeID, typename Key, typename Weight, typename Data, typename IndexStorage = ArrayStorage< NodeID, Key > > template < typename NodeID, typename Key, typename Weight, typename Data, typename IndexStorage = ArrayStorage< NodeID, Key > >
class BinaryHeap { class BinaryHeap {
private: private:

View File

@ -32,7 +32,7 @@ struct _HeapData {
_HeapData( NodeID p ) : parent(p) { } _HeapData( NodeID p ) : parent(p) { }
}; };
typedef BinaryHeap< NodeID, int, int, _HeapData, SparseStorage< NodeID, unsigned > > _Heap; typedef BinaryHeap< NodeID, int, int, _HeapData, DenseStorage< NodeID, unsigned > > _Heap;
template<typename EdgeData, typename GraphT, typename KDTST = NodeInformationHelpDesk> template<typename EdgeData, typename GraphT, typename KDTST = NodeInformationHelpDesk>
class SearchEngine { class SearchEngine {