如何为无序映射编写自己的哈希和权益运算符,以便可以使用 char * 而不是 std::string 作为键?
问问题
57 次
1 回答
0
class PtrStr
{
protected:
const char *m_pcStr;
const int m_nSize;
public:
PtrStr(const char *pcStr, int nSize) : m_pcStr(pcStr), m_nSize(nSize) {}
~PtrStr() {};
const char *GetStr() const { return m_pcStr; }
const int GetSize() const { return m_nSize; }
};
namespace std
{
namespace tr1
{
template<> struct hash<PtrStr>
{
std::size_t operator()(PtrStr const &key) const
{
return MyHashMethod(key);
}
};
}
template<> struct equal_to<PtrStr>
{
bool operator()(const PtrStr &keyA, const PtrStr &keyB) const
{
return (strcmp(const_cast<PtrStr &>(keyA).GetStr(), const_cast<PtrStr &>(keyB).GetStr()) == 0);
return (strcmp(keyA.GetStr(), keyB.GetStr()) == 0);
}
};
}
typedef std::tr1::unordered_map<PtrStr, int> unorderedCharMap;
typedef std::tr1::unordered_map<PtrStr, int>::iterator unorderedCharMapItr;
于 2013-01-23T18:27:24.413 回答