2017-01-10 6 views
0

У меня есть std::set<vector<int>>, из которого я хотел бы переместить элементы (а не копировать) на std::vector<vector<int>>. Как мне это сделать?Как эффективно перемещать элементы из набора в вектор?

Я попытался использовать перемещение (которое я использую для перемещения между векторами) с помощью следующего фрагмента кода, но он не будет компилироваться.

#include<iostream> 
#include<set> 
#include<vector> 
using namespace std; 

int main(){ 
    set<vector<int>> res; 
    vector<int> first = {1,2,3}; 
    vector<int> second = {4,5,6}; 
    res.insert(first); 
    res.insert(second); 
    vector<vector<int>> ans; 
    for(auto i : res){ 
     ans.emplace_back(ans.end(),move(i)); 
    } 
    return 0; 
} 
+0

Вам следует приложить [MCVE] (http://stackoverflow.com/help/mcve). – tambre

+0

Разве компилятор не дал вам никаких сообщений о том, почему он не компилируется? – user2079303

ответ

1

set<T> не содержит T с; он содержит const T s. Таким образом, вы не можете просто переместить объекты из него.

+0

Кто-то ответил здесь ранее, используя 'push_back' и' move'. Что это делает? – zorro

+0

@zorro: Он делает копию. Вы можете доказать, что [используя тот же код, только с не скопированным типом] (http://ideone.com/q1tjAk). Вы, естественно, получаете ошибку компиляции о попытке вызвать функцию 'delete'd. –