读书人

请教vc7中的hash_map怎样使用

发布时间: 2012-03-01 10:25:47 作者: rapoo

请问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还不是标准。

读书人网 >C++

热点推荐