【发布时间】:2017-12-08 23:20:19
【问题描述】:
没有一个主题解决了我在 C++ 中将结构体作为键映射进行比较的问题。
结构代码如下:
struct XYZ{
int x, y, z;
}
struct XYZComp{
bool operator()(const XYZ& l, const XYZ& r)
{
return ((l.x==r.x)&&(l.y==r.y)&&(l.z==r.z));
}
}
主要看起来像
int main()
{
map<XYZ, int, XYZComp> m;
m.insert(std::make_pair<XYZ,int>({1,2,3}, 1)); //ok
map<XYZ, int, XYZComp>::iterator it = m.find({1,0,3});
if(it!=m.end())
{
std::cout<<"Key exists in map";
}
else
{
m.insert(std::make_pair<XYZ,int>({1,0,3}, 1));
//never come here
//compiler thinks key already exists in map
}
return 0;
}
我刚刚尝试不使用 XYZComparer,但它仍然无法正常工作。
struct XYZ{
int x,y,z;
bool operator==(const XYZ& xyz)
{
return (x=xyz.x) && (y=xyz.y) && (z=xyz.z);
}
bool operator<(const XYZ& xyz)
{
return (x>xyz.x) && (y>xyz.y) && (z>xyz.z);
}
}
当我尝试地图中的现有项目时,如何解决比较这些结构 XYZ。
编辑:当至少一个数字正确时,编译器认为结构是相同的。
【问题讨论】:
-
"但还是不行。"没有帮助。我可以就这样离开它,让您找出原因(这同样有帮助),或者我可以解释为什么节省您查找它的时间和精力没有帮助......是的 - 如果它不起作用,说什么你得到了,你所期待的,这样人们就不必自己尝试解决了!
标签: c++ dictionary key stdmap