我在用非平凡的键类型实现映射时遇到了麻烦。最初,我需要一个地图,该地图将使用GUID类型作为键:
std::map<GUID, int>
由于编译器不知道如何比较GUID,因此我选择了以下方法来解决此问题。让我们以以下方式包装GUID:
class MyGUID
{
public:
MyGUID(const GUID& _guid) : m_guid(_guid) {}
bool operator <(const MyGUID& otherGUID) const
{
return m_guid.Data1 < otherGUID.Data1;
}
bool operator ==(const MyGUID& otherGUID) const
{
return m_guid.Data1 == otherGUID.Data1;
}
private: GUID m_guid;
};
很明显,上面对重载运算符的实现通常是不够的,但对于我的项目而言就足够了,因为我的项目是预先确定的,并且不会更改任何GUID。 因此,我将使用以下地图代替我的原始地图:
std::map<MyGUID, int>
编译器(VS2015)对此非常满意,我可以毫无问题地填充地图:
Std::map<MyGuid, int> fooMap;
GUID g1, g2;
CLSIDFromString(“{102958f3-7578-41ca-af71-aa236a488d52}”, &g1);
CLSIDFromString(“{3c55a13d-55e1-47cc-97a3-51b3f680da79}”, &g2);
fooMap[g1] = 1;
fooMap[g2] = 12;
稍后,当我尝试通过键查找地图条目时出现问题:
fooMap.find(g1);
结果是
fooMap.end()
根据调试器,我的重载运算符不会作为“查找”的一部分事件执行。我在做什么错了?