2012-06-06 18 views
5

Czy to możliwe przy użyciu algorytmu STL do głębokiego kopiowania wartości std :: map do std :: set?Skopiuj std :: map do std :: set in C++

Nie chcę jawnie wstawiać do nowego zestawu.

ja nie chcą wyraźnie to zrobić:

std::map<int, double*> myMap; //filled with something 
std::set<double*> mySet; 

for (std::map<int, double*>::iterator iter = myMap.begin(); iter!=myMap.end(); ++iter) 
{ 
    mySet.insert(iter->second); 
} 

ale znaleźć więcej coincise i elegancki sposób, aby to zrobić, z głęboką kopię wartości.

+0

Dodaj kod. Czy próbujesz skopiować 'map''' klucz_tylko' lub 'wartość_typu'? – dirkgently

+1

Co, jeśli są duplikaty? Czy zamiast tego używasz 'multiset'? –

+0

Nie będzie żadnych duplikatów, a jeśli są, nie jest ważne. – linello

Odpowiedz

8

Co z tym?

std::transform(myMap.begin(), myMap.end(), std::inserter(mySet, mySet.begin()), 
    [](const std::pair<int, double*>& key_value) { 
     return key_value.second; 
    }); 

To tylko kopiuje wskaźniki. Jeśli chcesz głęboko kopię, wtedy trzeba zrobić:

std::transform(myMap.begin(), myMap.end(), std::inserter(mySet, mySet.begin()), 
    [](const std::pair<int, double*>& key_value) { 
     return new double(*key_value.second); 
    }); 

BTW, kod używa funkcji lambda (dostępne tylko z C++ 11). Jeśli nie możesz używać C++ 11, możesz użyć wartości function object.

Powiązane problemy