gpt4 book ai didi

c++ - 如何在 std::map 中使用结构作为键

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:15:03 25 4
gpt4 key购买 nike

我想使用 std::map其键和值元素是结构。

我收到以下错误: error C2784: 'bool std::operator <(const std::basic_string<_Elem,_Traits,_Alloc> &,const _Elem *)' : could not deduce template argument for 'const std::basic_string<_Elem,_Traits,_Alloc> &' from 'const GUID

我知道我应该重载 operator <对于那种情况,但问题是我无法访问我想使用的结构的代码(VC++ 中的 GUID 结构)。

这是代码片段:

//.h

#include <map>
using namespace std;

map<GUID,GUID> mapGUID;


//.cpp

GUID tempObj1, tempObj2;
mapGUID.insert( pair<GUID,GUID>(tempObj1, tempObj2) );

如何解决这个问题?

最佳答案

您可以将比较运算符定义为独立函数:

bool operator<(const GUID & Left, const GUID & Right)
{
// comparison logic goes here
}

或者,由于通常 < 运算符对 GUID 没有多大意义,您可以改为提供自定义比较仿函数作为 std::map 模板的第三个参数:

struct GUIDComparer
{
bool operator()(const GUID & Left, const GUID & Right) const
{
// comparison logic goes here
}
};

// ...

std::map<GUID, GUID, GUIDComparer> mapGUID;

关于c++ - 如何在 std::map 中使用结构作为键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5353287/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com