std :: sort一个实现了移动构造函数的类

时间:2018-05-07 22:06:48

标签: c++ c++11 lambda stdvector move-semantics

是否可以在不使用整个元素的情况下使用std :: sort?

std::vector<std::pair<int, myclass> > unsorted_vec;
for (some_iterations) {
    unsorted_vec.emplace_back(rand(), std::move(instance_of_myclass));
}
std::sort(unsorted_vec.begin(), unsorted_vec.end(), 
          [](auto & l, auto & r) { return l.first < r.first; });

上述代码提供了以下编译错误,除非注释掉std::sort行。

error: use of deleted function 'myclass & myclass::operator=(const myclass &)' is 
       implicitly declared as delete because 'myclass' declares a move constructor.

现在我确实为myclass声明了一个移动构造函数,而且,我实际上想要删除引用构造函数。我的问题是,我该如何排序这个数组?是否可以在不接触第二部分的情况下获得对我的第一部分的引用?

1 个答案:

答案 0 :(得分:1)

根据std::sort上的此引用,您的类需要同时移动可构造移动可分配以便可排序

如果你的课程本身不是 moveble ,那么这样的事情应该可以正常工作:

class myclass
{
public:
    myclass(myclass const&) = delete; // or implement
    myclass(myclass&& other) { /* stuff to construct*/ }

    myclass& operator=(myclass const&) = delete; // or implement
    myclass& operator=(myclass&& other) { /* stuff to assign*/ return *this; }

};