本文整理汇总了C++中Map::GetValue方法的典型用法代码示例。如果您正苦于以下问题:C++ Map::GetValue方法的具体用法?C++ Map::GetValue怎么用?C++ Map::GetValue使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Map
的用法示例。
在下文中一共展示了Map::GetValue方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Dijkstra
DoubleLinkedList<GraphNode *> Dijkstra(GraphNode *Start, GraphNode * End)
{
Map<GraphNode *, DijkstraHelperNode *> NodeHelperMap;
DoubleLinkedList<DijkstraHelperNode *> Visited;
MinHeap<DijkstraHelperNode *> OpenHeap;
DijkstraHelperNode *NewHelper = new DijkstraHelperNode();
NewHelper->m_Node = Start;
NewHelper->m_Cost = 0;
NodeHelperMap.Insert(Start, NewHelper);
OpenHeap.Insert(NewHelper);
while(!OpenHeap.IsEmpty())
{
DijkstraHelperNode *CurrentHelperNode = OpenHeap.PopTop();
assert(CurrentHelperNode != NULL);
GraphNode *CurrentGraphNode = CurrentHelperNode->m_Node;
assert(CurrentGraphNode != NULL);
DoubleLinkedList<GraphEdge *> *CurrendEdges = CurrentGraphNode->GetEdges();
DoubleListNode<GraphEdge *> *CurrentEdge = CurrentEdges.GetHead();
while(CurrentEdge != NULL)
{
GraphNode *OtherNode = CurrentEdge->m_End;
if(OtherNode == CurrentGraphNode)
{
OtherNode = CurrentEdge->m_Start;
}
assert(OtherNode != CurrentGraphNode);
DijkstraHelperNode *NodeHelper = NodeHelperMap.GetValue(OtherNode);
if(NodeHelper == NULL)
{
NodeHelper = new DijkstraHelperNode();
NodeHelper->m_Node = OtherNode;
NodeHelperMap.Insert(OtherNode, NodeHelper);
OpenHeap.Insert(NodeHelper);
}
int CostToNode = CurrentHelperNode->m_Cost + CurrentEdge->m_Cost;
if(CostToNode < NodeHelper->m_Cost)
{
NodeHelper->m_Cost = CostToNode;
NodeHelper->m_Previous = CurrentGraphNode;
OpenHeap.Update(NodeHelper);
}
if(OtherNode == End)
{
break;
}
}
}
DoubleLinkedList<GraphNode *> Path;
DijkstraHelperNode *EndHelper = NodeHelperMap.GetValue(End);
if(EndHelper != NULL)
{
DijkstraHelperNode *CurrentHelper = EndHelper;
while(CurrentHelper != NULL)
{
Path.AddFront(CurrentHelper->m_Node);
CurrentHelper = CurrentHelper->m_Previous;
}
}
}
示例2: RegisterHash
void ReverseHash::RegisterHash( const HashedString& Hash, const SimpleString& String )
{
if( gReverseHashEnabled )
{
#if BUILD_DEV
const Map<HashedString, SimpleString>::Iterator HashIter = gReverseHashMap.Search( Hash );
if( HashIter.IsValid() )
{
const SimpleString ExistingString = HashIter.GetValue();
if( ExistingString != String )
{
PRINTF( "ReverseHash: Hash collision detected between \"%s\" and \"%s\"!\n", ExistingString.CStr(), String.CStr() );
}
}
#endif
gReverseHashMap[ Hash ] = String;
}
else
{
// Even though it's safe, this shouldn't be called if the reverse hash isn't enabled,
// because it could be wasting time doing the SimpleString construction.
WARNDESC( "ReverseHash: Not enabled." );
}
}
示例3: ReversedHash
SimpleString ReverseHash::ReversedHash( const HashedString& Hash )
{
if( gReverseHashEnabled )
{
const Map<HashedString, SimpleString>::Iterator HashIter = gReverseHashMap.Search( Hash );
if( HashIter.IsValid() )
{
return HashIter.GetValue();
}
else
{
WARN;
return SimpleString( "(Hash)" );
}
}
else
{
WARNDESC( "ReverseHash: Not enabled." );
return SimpleString( "" );
}
}