Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ std::映射键与操作员不匹配<;_C++_Dictionary_Stl_Std_Glm Math - Fatal编程技术网

C++ std::映射键与操作员不匹配<;

C++ std::映射键与操作员不匹配<;,c++,dictionary,stl,std,glm-math,C++,Dictionary,Stl,Std,Glm Math,我在调试我的一段小代码时遇到了很多困难: std::map<glm::ivec3,int> myMap; glm::ivec3 myVec(3, 3, 3); myMap.find(myVec); std::map myMap; glm::ivec3 myVec(3,3,3); myMap.find(myVec); 我得到以下错误: c:\ProgramFiles(x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include

我在调试我的一段小代码时遇到了很多困难:

std::map<glm::ivec3,int> myMap;
glm::ivec3 myVec(3, 3, 3);
myMap.find(myVec);
std::map myMap;
glm::ivec3 myVec(3,3,3);
myMap.find(myVec);
我得到以下错误:


c:\ProgramFiles(x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\bits\stl_function.h | 237 |错误:与“运算符”不匹配您可以实现比较函数:

bool operator<(const glm::ivec& lhs, const glm::ivec& rhs)
{
    return lhs.x < rhs.x ||
           lhs.x == rhs.x && (lhs.y < rhs.y || lhs.y == rhs.y && lhs.z < rhs.z);
}

bool算子我不熟悉
glm
,但从数学上讲,这并不奇怪,因为向量没有自然的顺序;也就是说,当两者可以位于3d空间中的任何位置时,u无序的地图(哈希表),除非在你的问题中需要某种排序。p> 下面是一个讨论Java
hashCode()
函数的链接,其中讨论了对复合对象进行哈希处理的各种方法

对于一个状态为三个整数的类,我可能会做
((x*p)+y)*p)+z
,其中
p
是一个小素数,比如31。(这方面有很多变化,更复杂的功能取决于数据结构等)

这里有一些关于C++散列的链接。


是否有一个<代码> BoOL OrrRealToNO,如果不想更改源代码(我不是C++的PRO),我不知道是否可以添加一个。检查建议的副本和答案,这些应该有助于解决您的问题(不需要改变遗留资源)。我不同意这是引用链接的重复。在这种情况下没有自然顺序,因此
map
不是很合适。+1:Or,
return std::tie(lhs.x,lhs.y,lhs.z)如果你想保存击键并有一个兼容的C++11 impl。我不知道到底是什么,但我的勇气告诉我s.th。这个解决方案的气味。查看
lhs
rhs
作为地形矢量表示,比较操作可能只是表示矢量的实际“长度”@πάνταῥεῖ 我同意。使用
std::map
需要某种严格的弱排序,但3D向量没有“自然”排序,因此它可能是一个比较函子,而不是
运算符。你知道无序映射和自定义键(自制类)的好教程吗?我不知道如何制作哈希函数。我找到的每个教程都向我展示了如何使用带有int或字符串的无序_映射。。。