2012-02-04 5 views
1

나는 다음과 같은 코드가 있습니다발견() 부스트 bimap 문제

wxString getColorName(const wxColour& color) 
{ 
    typedef ColorComboBox::ColorMap::right_const_iterator ConstColorIterator; 
    ColorComboBox::ColorMap colorMap = ColorComboBox::getDefaultChoices(); 
    ConstColorIterator it = colorMap.right.find(color); 
    return it != colorMap.right.end() ? it->second : 
      ColorComboBox::CUSTOM_COLOR; 
} 

색상 맵

typedef boost::bimaps::bimap \ 
      <wxString, boost::bimaps::vector_of<wxColour> > \ 
      ColorMap; 

정의되고, 나는 기본적으로 찾기 기능을하지 않습니다 말한다 긴 템플릿 오류가 계속 있다. 그러나

ColorMap::left_const_iterator it = choices_.left.find(GetValue()); 

괜찮습니다.
필자는 bimap의 특정 컬렉션 유형에서만 find 함수가 정의되어 있다는 점에 대해 잘 알고 있습니다. wxColour를 비교할 수 없기 때문에 set_of wxColours를 사용할 수 없습니다. (그게 무슨 뜻일까요?) 또한 컬렉션 유형을 list_of로 변경하려고했지만 그 중 하나도 작동하지 않았습니다. bimap을 사용함에있어서의 나의 요지는 어느쪽으로 든 값을 찾을 수있게하기 위해서였습니다. 잘못된 컨테이너를 사용하고 있습니까? find 함수를 사용할 수 있도록 wxColour에 사용할 수있는 다른 컬렉션 유형이 있습니까?

편집 : 나는 내 자신의 컨테이너 클래스를 만들었습니다.

답변

4

Bimap에서는 각면의 mapping type을 정의 할 수 있습니다. 응용 프로그램에서 빠른 검색을 수행해야하는 경우 map/multimap 또는 unordered_map/unordered_multimap 기반 매핑을 사용하십시오. 설명서를 읽고 각 맵보기가 동등한 STL 컨테이너를 모델로 기억, 그래서 그들은 같은 제약과 인터페이스를 공유하십시오 :

  • set_of (주문, 독특한) ->std::map
  • multiset_of (주문) -> (해시, 독특한) std::multimap
  • unordered_set_of ->std::unordered_map
  • unordered_multiset_of (해시) ->std::unordered_multimap
  • (서열) -> list_map (std::list<pair>)
  • vector_of (랜덤 액세스) -> vector_map (std::vector<pair>)
  • unconstrained_set_of은 - 당신이 vector_of<wxColour>를 선택하는 이유 이해가 안

를 매핑하지> 아마도 set_of<wxColour> (기본값)이 컴파일되지 않았을 수도 있습니다 ...이 경우, 명시한대로 bimap에게 이러한 항목을 주문하는 방법을 알려주기 위해 자체 비교 연산자를 정의해야합니다. vector-mapping과 list-mapping은 관계의 삽입 순서를 보존하는 bimap을 생성 할 수있게 해줍니다.

귀하의 경우 원하는 것은 unordered_set_of입니다. wxColour에 대해 사용자 고유의 해시 펑터를 정의해야합니다. Boost.Hash를 사용하여 구현할 수 있습니다.

감사합니다.

+0

감사합니다. 당신의 대답은 좋은 것이므로 다른 해결책을 찾았음에도 당신을지지했습니다. – Eva