【问题标题】:c++ sort vector of pair objects, compile error asking for operator "="c ++对对象的排序向量,编译错误要求运算符“=”
【发布时间】:2019-11-05 01:48:24
【问题描述】:

我有一个这样的向量:

vector<pair<const MyObj&, MyStrut>> alls;

当我这样做时

swap(alls[0], alls[1]);

它抱怨

二进制“=”:未找到接受“_Ty”类型左侧操作数的运算符(或没有可接受的转换

为什么?

【问题讨论】:

  • 一般来说const MyObj &amp;不能被分配到,因为它是const。分配pair&lt;X, Y&gt; 通常通过分配X 和分配Y 来工作,如果其中任何一个都不能被分配,那么这对也不能。 swap 的默认实现是赋值。

标签: c++ sorting vector


【解决方案1】:

在尝试交换pairs 的过程中,它本质上是尝试从const 引用分配给const 引用。你不能重新绑定一个引用,所以它唯一能做的就是交换每个引用所引用的对象。但由于这些是 const 引用,所以这也是不可能的。

如果您认为需要将引用存储在数据结构中并以任何方式操作包含它的结构,通常情况下您实际上想要存储某种类型的指针(例如std::shared_ptr),这将允许您将其存储在数据结构中并在数据结构中重新分配(例如swap),同时在其他地方仍有指向它的自有指针(以保留您所依赖的“参考性”)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-13
    • 1970-01-01
    • 2020-02-22
    • 2013-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多