2012-06-06 30 views
5

Bir std :: map değerlerini std :: setine kopyalamak için bir STL algoritması ile mümkün mü?Kopyala std :: map for std :: set in C++

Yeni kümeye açıkça eklemek istemiyorum.

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); 
} 

ama daha coincise ve değerlerin derin bir kopyası ile, bunu yapmak için zarif bir yol bulmak:

Ben açıkça bu yapmak istiyorsunuz .

+0

Bazı kod ekleyin. 'Map' 'key_type' veya' value_type'’ını kopyalamaya mı çalışıyorsunuz? – dirkgently

+1

Yinelenen varsa ne olur? Bunun yerine bir "multiset" kullanıyor musunuz? –

+0

Yinelenmez ve varsa, önemli değildir. – linello

cevap

8

Buna ne dersiniz?

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

Bu, yalnızca işaretçileri kopyalar. Eğer derin kopyasını istiyorsanız, o zaman yapmanız gerekir:

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, kodu (C++ 11 den kullanılabilir) lambda işlevlerini kullanır. C++ 11'i kullanamıyorsanız, bir function object kullanabilirsiniz.

İlgili konular