使用具有非平凡键类型的地图

时间:2018-06-24 03:47:37

标签: c++ visual-c++ stl

我在用非平凡的键类型实现映射时遇到了麻烦。最初,我需要一个地图,该地图将使用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()

根据调试器,我的重载运算符不会作为“查找”的一部分事件执行。我在做什么错了?

0 个答案:

没有答案
相关问题