std::sort 一个实现了移动构造函数的类
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.
现在我确实为 myclass 声明了一个移动构造函数,此外,我实际上希望删除引用构造函数。我的问题是,如何对这个数组进行排序?是否可以在不接触第二部分的情况下获得对我配对的第一部分的引用?
根据 std::sort 上的参考,您的类需要既是可移动可构造的,又是可移动可分配的,以便可排序。
如果你的类本质上不是可移动的,那么这样的东西应该可以正常工作:
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::vector::p ush_back() 不会在 MSVC 上编译具有已删除移动构造函数的对象
- 仅包含可移动 std::map 的类的移动构造函数不起作用
- 为什么调用复制构造函数而不是移动构造函数?
- 基类中的默认析构函数禁用子类中的移动构造函数(如果有成员)
- 从具有按值捕获的 lambda 移动构造 std::函数时,移动构造函数调用两次
- 移动构造函数和右值引用
- 为什么 std::memmove 中联合的默认非平凡移动构造函数C++?
- 具有专用化的模板类中的可靠条件复制和移动构造函数
- C++:为什么不调用移动构造函数?
- 移动构造函数永远不会被调用
- C++:关于使用 Stroustrup 示例移动构造函数/赋值的问题
- 运算符+ 的规范实现涉及额外的移动构造函数
- C ++为什么在移动构造函数中需要移动/前进
- 为什么在删除"移动构造函数"时使用"复制构造函数"?
- 为什么这里不调用移动构造函数?
- 隐式移动构造函数
- 如何为具有私有成员的派生类实现移动构造函数
- 为什么不调用移动构造函数
- 是否可以避免在以下代码中复制/移动构造函数的需要?