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> >
이 작동합니다. 왼쪽 벡터처럼 수없는 것 같습니다. 그러나 그것의 양방향으로 중요하지 않아야한다.
흠. 그럼 일반적인 삽입 방법은 무엇입니까? 'set_of'가'insert'를 사용해야하지만'vector_of'가'push_back' 또는 end()를 전달해야한다면 말이죠. 그리고이 generic을 만들기에는 너무 복잡한'enable_if'와 같은 타입 검사를 컴파일 할 필요가 있습니다. –
'insert (Iterator, ValueType)'는 삽입 할 수있는 모든 뷰와 함께 작동합니다. 그러나'set_of' 뷰와 함께'map.end()'를 사용하면 삽입 지점 앞에있는 반복자 (O (log (N))와 O (1))를 사용했다면 성능이 저하 될 것입니다. 이것이 이것이 당신이 원하는만큼 일반적이지 않은 이유라고 생각합니다. 당신은 당신의 성능 요구 사항에 맞는 bimap 조합을 선택하고 그 조합에 허용 된 방법을 사용하기로되어 있습니다. – user2349552
질문의 시작 부분에서 주석을 변경했습니다. 알고있는 지식 수준이 라이브러리에 더 정확하게 반영됩니다. 당신은 아마 더 신뢰할 수있는 대답을 기다려야합니다. – user2349552