通过const成员函数对向量排序

时间:2019-04-08 21:34:37

标签: c++

我正在尝试使用lambda函数对自定义类的向量进行排序,但是在某个地方,我会丢弃一些我不理解的const

我已经尝试过在这里寻找答案,尽管许多人都提出了几乎完全相同的问题,但似乎没有一个是相同的问题。我不禁止使用move构造函数,也不以这种形式调用非const成员/成员函数(至少我知道。显然我做错了。)我能想到的最接近的是返回非const成员的值,但是我通过const函数做到了,我明确地想做到这一点。我希望面向公众的成员函数不能更改任何内容,而面向私有的成员可以在内部进行更改(但不能由任何面向公众的函数更改)。我正在做的唯一真正奇怪的事情(我不认为这对此没有任何影响)是我的班级不可复制,并且具有不可复制的成员(移动很好)。

class MyClass{
 public:
  const SortByThis() { return internal_value; } //Edit: This declaration is the problem, as noted in the accepted answer.
  MyClass(SortByThis, BigNonCopyableDataStrcuture);
  MyClass(MyClass&)=delete; //No copy allowed. Only move.
 private:
  int internal_value;
  BigNonCopyableDataStructure_t big_structure;
}
std::vector<MyClass> vec;
DoFillVec(vec); //Vec now has many items but is not sorted

std::sort(vec.begin(), vec.end(), [](const MyClass &lhs, const MyClass &rhs){return lhs.SortByThis() < rhs.SortByThis();});
//This is where things scream at me.
//Project/Module.cc:226:95: error: passing ‘const Namespace::Module::MyClass’ as ‘this’ argument discards qualifiers [-fpermissive]

我希望这能对向量进行排序,但是编译器会抱怨我做错了事,而且我不知道我做错了什么。在这一点上,我只能花时间去整理东西,直到它编译为止(这并不是一种不适的感觉)。

1 个答案:

答案 0 :(得分:1)

SortByThis声明不正确。 const放在函数之后,而不是之前:

int SortByThis() const { return internal_value; }

让我们知道这是否可以解决问题!