2014-02-18 118 views
1

我有一張map<double, tuple<double, double>> m1的地圖。我是否可以將其複製到map<double, double> m2表格的地圖上,使其密鑰相同,並且m2中的值爲get<0>(m1->second)而不使用循環?謝謝!將映射<double,tuple <double,double >>映射爲<double,double> without loop?

+0

不推薦使用'map ',因爲鍵值的任何輕微偏移都會導致不一致的結果。 –

+0

@MarkRansom也許他正在使用它進行排序。您仍然可以使用它來查找所有鍵> x'等。 –

+0

我所擁有的是一個地圖,其中鍵是將來的若干年,採用十進制格式。例如,從今天起1.5年。我能否遇到這種用法的問題?謝謝。 –

回答

1

會是這樣的工作嗎?

vector<pair<double, double>> v(m1.size()); 
auto lambda = [](pair<double, tuple<double, double>> p){ return make_pair(p.first, get<0>(p.second)); }; 
transform(m1.begin(), m1.end(), v.begin(), lambda); 
map<double, double> m2(v.begin(), v.end()); 

請注意,我們並沒有真正避免循環;我們只是讓std::transform爲我們做循環。如果不允許間接循環,你可能需要的是一個變換迭代器。請參閱http://www.boost.org/doc/libs/1_36_0/libs/iterator/doc/transform_iterator.html

相關問題