std::sort 实现移动构造函数的 class
std::sort a class that's implemented a move constructor
是否可以在不使用整个元素的情况下使用 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.
现在我确实为我的类声明了一个移动构造函数,而且,我实际上想要删除引用构造函数。我的问题是,如何对这个数组进行排序?是否可以在不接触第二部分的情况下获得对第一部分的引用?
根据 std::sort 上的参考资料,您的 class 需要既 可移动构造 又 可移动为了可排序.
如果您的 class 本身不是 可移动的 那么像这样的东西应该可以正常工作:
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; }
};
是否可以在不使用整个元素的情况下使用 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.
现在我确实为我的类声明了一个移动构造函数,而且,我实际上想要删除引用构造函数。我的问题是,如何对这个数组进行排序?是否可以在不接触第二部分的情况下获得对第一部分的引用?
根据 std::sort 上的参考资料,您的 class 需要既 可移动构造 又 可移动为了可排序.
如果您的 class 本身不是 可移动的 那么像这样的东西应该可以正常工作:
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; }
};