是否可以在不使用整个元素的情况下使用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声明了一个移动构造函数,而且,我实际上想要删除引用构造函数。我的问题是,我该如何排序这个数组?是否可以在不接触第二部分的情况下获得对我的第一部分的引用?
答案 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; }
};