2013-05-03 1 views
1
typedef boost::bimap<boost::bimaps::vector_of<int>, boost::bimaps::vector_of<float> > bimap_t; 
bimap_t mp; 
mp.left.insert(bimap_t::left_value_type(2, 2.0f)); 

왜 작동하지 않습니까? insert()에 컴파일러 오류를 제공합니다. 을 인수로 사용하는 insert()을 찾을 수 없습니다.boost :: bimap not taken vector_of

그러나 boost::bimap<boost::bimaps::set_of<int>, boost::bimaps::vector_of<float> >이 작동합니다. 왼쪽 벡터처럼 수없는 것 같습니다. 그러나 그것의 양방향으로 중요하지 않아야한다.

답변

0

나는 전에 Boost.Bimap을 사용 해본 적이 없다. 그러나 문서를보고 보면 leftright 뷰의 유형처럼 보이며 따라서 사용할 수있는 멤버 함수에 의존한다. 템플릿 매개 변수로 사용하는 컬렉션 vector_of 뷰에서 사용할 수있는 메서드는 here입니다.

mp.left.insert(mp.left.end(), bimap_t::left_value_type(2,2.0f)); 
mp.left.push_back(bimap_t::left_value_type(2,2.0f)); 

또한 사용할 수 있습니다 : 당신은 사용할 수

mp.left.push_front(bimap_t::left_value_type(2,2.0f)); 

을하지만 성능상의 이유로 권장하지 않습니다.

추신 : bimap<boost::bimaps::set_of<int>, boost::bimaps::vector_of<float> >을 사용하는 경우 insert은 왼쪽보기와 함께 작동하지만 올바른 것으로는 실패합니다.

+0

흠. 그럼 일반적인 삽입 방법은 무엇입니까? 'set_of'가'insert'를 사용해야하지만'vector_of'가'push_back' 또는 end()를 전달해야한다면 말이죠. 그리고이 generic을 만들기에는 너무 복잡한'enable_if'와 같은 타입 검사를 컴파일 할 필요가 있습니다. –

+0

'insert (Iterator, ValueType)'는 삽입 할 수있는 모든 뷰와 함께 작동합니다. 그러나'set_of' 뷰와 함께'map.end()'를 사용하면 삽입 지점 앞에있는 반복자 (O (log (N))와 O (1))를 사용했다면 성능이 저하 될 것입니다. 이것이 이것이 당신이 원하는만큼 일반적이지 않은 이유라고 생각합니다. 당신은 당신의 성능 요구 사항에 맞는 bimap 조합을 선택하고 그 조합에 허용 된 방법을 사용하기로되어 있습니다. – user2349552

+0

질문의 시작 부분에서 주석을 변경했습니다. 알고있는 지식 수준이 라이브러리에 더 정확하게 반영됩니다. 당신은 아마 더 신뢰할 수있는 대답을 기다려야합니다. – user2349552

관련 문제