急问一个关于hash_map的有关问题

急!!问一个关于hash_map的问题
我有这个的一个hash_map

struct SignalUnit
{
enum TYPE
{
INT8,
INT16,
INT32,
STR,
RAW
};
enum
{
//MAXVALUELEN = 32
//MAXVALUELEN = 2048
//MAXVALUELEN = 8092
MAXVALUELEN = 4096
};
TYPE type;
guint8 value[MAXVALUELEN];
size_t valuelen;
guint8 raw[MAXVALUELEN];  
size_t rawlen;
short seq;  
};

struct ResultSetCompare
{
enum 
{
bucket_size = 4,
min_buckets = 15
};

size_t operator()(const string& str) const
  {
  unsigned long __h = 0;
  for (size_t i = 0 ; i < str.size() ; i ++)
  {
__h = 107*__h + str[i];
}
return size_t(__h);
}
bool operator()(const string& s1,const string& s2) const
{
return strcmp(s1.c_str(),s2.c_str()) < 0 ? true : false;
}
};

typedef hash_map<string,SignalUnit,ResultSetCompare> ResultSet;

这个hash_map在LINUX下可以正常的使用,现在在WINDOWS的C#环境下,确在当seq>=60的时候就不使再插入数据拉,
那位高手指导一下如何解决啊???

------解决方案--------------------
打开hash_map的头文件,认真看看它需要怎样的2个operator。各系统下要求是不同的。
------解决方案--------------------
c#中可以直接使用c++中的函数吗? 没见过啊.

或者你是指VS的环境?
如果是的话, 换个GCC的编译器试试, MinGW就可以.
------解决方案--------------------
你为什么要改hash算法呢,用默认的不行吗?