【发布时间】:2014-12-25 00:38:06
【问题描述】:
最初我的代码如下所示:
std::map< std::pair<int,int>, std::vector<Class0*> > aMap;
成功了。现在我的代码如下所示:
std::map< std::pair<Vec3f, Vec3f>, std::vector<Class0*> > aMap;
它不再正确映射(编译正常)。为什么?我该如何解决这个问题?
编辑:根据大众需求,这里是 3D 矢量(3 个浮点数)的比较代码:
class Vec3f {
...
bool operator () ( const Vector3f& v0, const Vector3f& v1 ) const {
return std::tie(v0[0], v0[1], v0[2]) < std::tie(v1[0], v1[1], v1[2]);
} ...
来自这个问题Overloading operator for set。上述比较适用于一组,但显然不适用于一对。为什么?
【问题讨论】:
-
“它不再正确映射(编译正常)”你能详细说明一下吗?预期和观察到的行为是什么?你能提供一个MCVE吗?
-
Class1是否有正确的复制构造函数? -
@TringVu 在您的实际问题中明确说明,而不是链接到另一个问题。甚至不要考虑将该链接编辑到您的问题中,提供完整的代码、错误消息以重现问题(不幸的是,您实际上比我做的更快)。
-
你给我们看的是
operator (),而不是operator <... -
--1 -- 在代码中使用
...。有人要求制作 MCVE,而且很容易,但您选择不制作。这意味着我们必须确定问题是您的转录还是实际错误,