std::unordered_set
がstd::unique_ptr<T>
であるとします。セットの要素を別の場所に移動することはできますか?STLコンテナから移動専用のタイプを取得するにはどうすればよいですか?
#include <unordered_set>
#include <iostream>
#include <memory>
#include <vector>
int main()
{
std::unordered_set<std::unique_ptr<int>> mySet;
mySet.insert(std::make_unique<int>(1));
mySet.insert(std::make_unique<int>(2));
mySet.insert(std::make_unique<int>(3));
std::vector<std::unique_ptr<int>> myVector;
for (auto&& element : mySet)
{
std::cout << *element << std::endl;
//myVector.push_back(element); won't compile as you can only get a const ref to the key
}
}
私はこれをやりたいけどstd::shared_ptr
を使用するように減少していたコードの非常に実用的な例があります。あなたは別の(より良い?)代替手段を知っていますか?
注::代わりにベクトルです。 [ノードベースのコンテナ](http://en.cppreference.com/w/cpp/container/node_handle)に特有のものです。また、移動に成功すると、move-fromオブジェクトは挿入や検索などのために読み込みが無効になっているため、未定義の動作を設定する可能性があるので注意してください。したがって、コンテナの使用には注意が必要ですまったく。 – metal
@metal私はおそらく何か間違っていますが、ベクターとのコンパイルエラーは同じです。http://coliru.stacked-crooked.com/a/51af3ac220c44619を参照してください。編集:私の悪い、 'std :: move'で動作します。ありがとう!新しいコード:http://coliru.stacked-crooked.com/a/95cb8a827d587723 – matovitch