2014-02-18 2 views
1

나는 map<double, tuple<double, double>> m1 형태의지도를 가지고있다. 이것을 map<double, double> m2 형태의지도에 복사하면 키가 동일하고 루프의 값을 사용하지 않고 m2 단위의 값은 get<0>(m1->second)입니다.? 감사!지도를 복사하려면 <double, tuple <double, double >>을 사용하십시오. <double, double>?

+0

키 값의 약간의 오프셋이 일치하지 않기 때문에'map '을 사용하는 것은 좋지 않습니다. –

+0

@ MarkRansom 아마도 그는 주문을 위해 그것을 사용하고 있습니다. 당신은 여전히'모든 키를 찾아서 'x 등을 사용할 수 있습니다. –

+0

제가 가지고있는 것은 십진수 형식으로 앞으로 몇 년 동안의 키가되는지도입니다. 예를 들어 오늘부터 1.5 년 동안 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

관련 문제