无法构造具有给定数据类型的多图

时间:2018-07-31 08:19:03

标签: c++ data-structures

我有自己的课程“ 3DSolid”,我正在尝试将项目插入Multimap中 所以,我正在这样定义我的Multimap:

std::multimap< 3DSolid, 3DSolid > &SolidsolidMapping;

并且我要插入以下内容:

    SolidsolidMapping.insert( std::make_pair( solid1, solid2 ) );

其中solid1和solid2是我的3DSolid类的对象。

因此,现在我得到一个关于“布尔<运算符”的错误消息:二进制<:找不到使用类型为const'3DSolid'...的左侧操作数的运算符。”

所以,我这样定义运算符:

bool operator<( const 3DSolid& _Left, const 3DSolid& _Right )
{
    return _Left < _Right;
}

然后,我没有任何编译错误。但是,当我运行程序时,它崩溃了,因为我定义的运算符没有任何意义。我只想构造一个未排序的Multimap。我不关心“运算符<”。

如果有人可以在代码中建议我的更改,我将非常高兴 提前致谢。

2 个答案:

答案 0 :(得分:0)

来自cppreference.com(突出显示的地雷):

  

Multimap是一个关联容器,包含已排序列表的   键值对,同时允许使用同一键输入多个条目。

如果您无法对项目进行排序,则multimap不是您想要的。如果您的项目没有有意义的比较功能,例如unordered multimap,请尝试使用显式无序的结构。产生这种区别的原因是,诸如随机访问之类的操作在排序后的数据集上效率更高。

答案 1 :(得分:0)

其他人已经解释了为什么您不应该使用par(cex.lab = 1)而是使用multimap的原因。

  

然后,我没有任何编译错误。但是当我运行程序时   崩溃。

程序崩溃的原因是,您的重载运算符递归地将其自身调用,并且由于递归调用而导致堆栈溢出。参见here

unsorted_multimap

正确的运算符重载方法应使用其成员(请参见here),如下所示:

bool operator<( const 3DSolid& _Left, const 3DSolid& _Right )
{
    return _Left < _Right;
}