연관있는 2개의 자료를 stl 컨테이너에 보관할때가 있다. 이럴때, 단 2개의 멤버만을 가지는 클래스를 하나 만드는것보다 pair 자료형을 쓰면 훨씬 편하다.
또한 3개까지도 pair<type1, pair<type2, type3> >를 이용하면 편리하다.
물론, 1개에 2개의 속성이 달린 경우에 더욱 직관적일 것이다.
물론, 1개에 2개의 속성이 달린 경우에 더욱 직관적일 것이다.
//슬라이드 컨트롤과 그것에 대응하는 값을 페어로 하여 벡터컨테이너에 넣는경우 ... std::vector< std::pair<CSliderCtrl*, float*> > m_vecRelatedBrushWorkArea_; ... void RegisterBrushWorkArea(CSliderCtrl* _pCtrl, float* _pEditSize) { *_pEditSize = _pCtrl->GetPos()*0.25f; m_vecRelatedBrushWorkArea_.push_back( std::pair<CSliderCtrl*, float*>(_pCtrl, _pEditSize)); } ... void SetBrushWorkAreaSize(int _size) { std::vector< std::pair<CSliderCtrl*, float*> >::iterator it = m_vecRelatedBrushWorkArea_.begin(); it->first->SetPos(_size); float editSize = it->first->GetPos() * 0.25; *(it->second) = editSize; static_cast<CWnd*>(it->first)->GetParent()->UpdateData(FALSE); it++; while( it != m_vecRelatedBrushWorkArea_.end()) { it->first->SetPos(_size); *(it->second) = editSize; static_cast<CWnd*>(it->first)->GetParent()->UpdateData(FALSE); it++; } } //3개의 요소를 중첩된 pair를 가지고 표현하는 경우 typedef std::vector< std::pair<CSliderCtrl*, std::pair< float*, CString* > > > BRUSH_WORK_AREA; BRUSH_WORK_AREA m_vecRelatedBrushWorkArea_; m_vecRelatedBrushWorkArea_.push_back( std::pair<CSliderCtrl*, std::pair<float*, CString*> >( _pCtrl, pair<float*, CString*>( _pEditSize, _pViewSize ) ) );
first, second는 STL/map에서 자주 보는데, 그것은 맵이 pair를 이용해서 만들어지기 때문이다.
댓글 없음:
댓글 쓰기