私は、コピーコンストラクタブルまたはデフォルトコンストラクタブルではないオブジェクトを含むベクトルをソートしようとしていますが、コンパイラがswap
の有効な関数を見つけることができないというエラーが発生します。私は移動コンストラクタを持つことで十分だろうと思った。私はここで何が欠けていますか?コピーコンストラクタを持たないオブジェクトでstd :: sortを使用するにはどうすればよいですか?
class MyType {
public:
MyType(bool a) {}
MyType(const MyType& that) = delete;
MyType(MyType&& that) = default;
};
int main(void) {
vector<MyType> v;
v.emplace_back(true);
sort(v.begin(), v.end(), [](MyType const& l, MyType const& r) {
return true;
});
}
cppreferenceによると、 'std :: sort'は、型をmoveibleとmoveに割り当てる必要があります。 – chris
@chrisはい、私は答えを明らかにしました、ありがとう。 – vsoftco
Spot on。要素はすべて既に存在しているため、移動することはできません。彼らは値を入れ替えるために移動させなければなりません。 –