请教vc7中的hash_map怎样使用
请问vc7中的hash_map怎样使用?
有个角色类CRole,它有Unique ID,偶需要在hash_map中能通过Unique ID获得CRole的指针,偶在网上看过源码,都是SGI STL的,VC7中无法直接使用
偶需要通过整型Key获得CRole对象的指针
请那个兄弟给个例子看看...
或改一下下面的源码
#include "stdafx.h "
// hash_map2.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h "
#include <string>
#include <hash_map>
#include <iostream>
using namespace std;
class CRole
{
public:
CRole(){
_UniqueGlobalID++;
m_UniqueID = _UniqueGlobalID;
std::cout < < m_UniqueID < < std::endl;
};
~CRole(){
if (_UniqueGlobalID > 0)
_UniqueGlobalID--;
//else
//DOTO 抛出异常
};
unsigned short GetUniqueRoleID(){ //返回角色编号
return m_UniqueID;
}
unsigned short m_UniqueID; //角色ID编号
static unsigned short _UniqueGlobalID;
};
unsigned short CRole::_UniqueGlobalID = 0;
void Main(){
stdext::hash_map <...> HASHROLE;
//1就是角色的UniqueID值
HASHROLE[1] = new CRole;
...
}
------解决方案--------------------
你遇到啥问题啊?
另外,一定要用hash吗?可未必比map快呀。
------解决方案--------------------
跟map一样使吧
------解决方案--------------------
详细解说STL hash_map:
http://www.stlchina.org/twiki/bin/view.pl/Main/STLDetailHashMap
------解决方案--------------------
using System;
using System.Collections; //使用Hashtable时,必须引入这个命名空间
class hashtable
{
public static void Main()
{
Hashtable ht=new Hashtable(); //创建一个Hashtable实例
ht.Add( "E ", "e ");//添加key/value键值对
ht.Add( "A ", "a ");
ht.Add( "C ", "c ");
ht.Add( "B ", "b ");
string s=(string)ht[ "A "];
if(ht.Contains( "E ")) //判断哈希表是否包含特定键,其返回值为true或false
Console.WriteLine( "the E key:exist ");
ht.Remove( "C ");//移除一个key/value键值对
Console.WriteLine(ht[ "A "]);//此处输出a
ht.Clear();//移除所有元素
Console.WriteLine(ht[ "A "]); //此处将不会有任何输出
}
}
------解决方案--------------------
typedef hash_map <int, std::string> HM_I2STR;
HM_I2STR hmTest;
hmTest.insert(HM_I2STR::value_type(2, "nihao "));
cout < <hmTest[2].c_str() < <endl;
你的例子可以类似的做
typedef hash_map <int, CRole*> HM_I2Role;
HM_I2Role hmTest;
hmTest.insert(HM_I2Role::value_type(11, new CRole));
根据id得到指针可以这样做
hmTest[ID]
------解决方案--------------------
> > TO 二,三楼的朋友,偶用来做游戏用的,要SPEED...
你应该学会用最通用最简单的方法解决问题,解决问题了再来看Speed。std::map的性能不见得满足不了你的需要,而hash_map还不是标准。
有个角色类CRole,它有Unique ID,偶需要在hash_map中能通过Unique ID获得CRole的指针,偶在网上看过源码,都是SGI STL的,VC7中无法直接使用
偶需要通过整型Key获得CRole对象的指针
请那个兄弟给个例子看看...
或改一下下面的源码
#include "stdafx.h "
// hash_map2.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h "
#include <string>
#include <hash_map>
#include <iostream>
using namespace std;
class CRole
{
public:
CRole(){
_UniqueGlobalID++;
m_UniqueID = _UniqueGlobalID;
std::cout < < m_UniqueID < < std::endl;
};
~CRole(){
if (_UniqueGlobalID > 0)
_UniqueGlobalID--;
//else
//DOTO 抛出异常
};
unsigned short GetUniqueRoleID(){ //返回角色编号
return m_UniqueID;
}
unsigned short m_UniqueID; //角色ID编号
static unsigned short _UniqueGlobalID;
};
unsigned short CRole::_UniqueGlobalID = 0;
void Main(){
stdext::hash_map <...> HASHROLE;
//1就是角色的UniqueID值
HASHROLE[1] = new CRole;
...
}
------解决方案--------------------
你遇到啥问题啊?
另外,一定要用hash吗?可未必比map快呀。
------解决方案--------------------
跟map一样使吧
------解决方案--------------------
详细解说STL hash_map:
http://www.stlchina.org/twiki/bin/view.pl/Main/STLDetailHashMap
------解决方案--------------------
using System;
using System.Collections; //使用Hashtable时,必须引入这个命名空间
class hashtable
{
public static void Main()
{
Hashtable ht=new Hashtable(); //创建一个Hashtable实例
ht.Add( "E ", "e ");//添加key/value键值对
ht.Add( "A ", "a ");
ht.Add( "C ", "c ");
ht.Add( "B ", "b ");
string s=(string)ht[ "A "];
if(ht.Contains( "E ")) //判断哈希表是否包含特定键,其返回值为true或false
Console.WriteLine( "the E key:exist ");
ht.Remove( "C ");//移除一个key/value键值对
Console.WriteLine(ht[ "A "]);//此处输出a
ht.Clear();//移除所有元素
Console.WriteLine(ht[ "A "]); //此处将不会有任何输出
}
}
------解决方案--------------------
typedef hash_map <int, std::string> HM_I2STR;
HM_I2STR hmTest;
hmTest.insert(HM_I2STR::value_type(2, "nihao "));
cout < <hmTest[2].c_str() < <endl;
你的例子可以类似的做
typedef hash_map <int, CRole*> HM_I2Role;
HM_I2Role hmTest;
hmTest.insert(HM_I2Role::value_type(11, new CRole));
根据id得到指针可以这样做
hmTest[ID]
------解决方案--------------------
> > TO 二,三楼的朋友,偶用来做游戏用的,要SPEED...
你应该学会用最通用最简单的方法解决问题,解决问题了再来看Speed。std::map的性能不见得满足不了你的需要,而hash_map还不是标准。