2011-11-15 3 views
0

빠른 검색을 위해 부스트의 다중 색인 컨테이너를 사용하려고하는데, 찾기가 힘듭니다. 약간의 설명서가 다소 혼란 스럽습니다.부스트 다중 인덱스

struct reports_entry 
{ 
    reports_entry( const std::string& category, 
       const std::string& reportName): 
       cat_name_(category), 
       report_name_(reportName) 
    {} 
    std::string cat_name_; 
    std::string report_name_; 
}; 

typedef multi_index_container< 
reports_entry, indexed_by< 
    ordered_non_unique<member<reports_entry, std::string 
    , &reports_entry::cat_name_> > 
    , ordered_unique<member<reports_entry, std::string 
    , &reports_entry::report_name_> > 
    > 
> reports_set; 

fnv.insert(reports_entry("report", "somekindofreport1.dat")); 
fnv.insert(reports_entry("report", "somekindofreport3.dat")); 
fnv.insert(reports_entry("report", "somekindofreport2.dat")); 
fnv.insert(reports_entry("mysecondreport", "somekindofreport4.dat")); 
fnv.insert(reports_entry("mysecondreport", "somekindofreport5.dat")); 

을 이제 내가 잘못에 세그먼트 모든 dumbmreport 보고서를 검색하려고하면 :

Rname_view::iterator it = fdv.find("report"); 
std::cout << it->report_name_; 

나는이 권리를하고 오전 여기에 내가 가진 무엇인가? 그 유형의 모든 보고서를 얻으려면 루프가 필요합니까? 또는 나는 이것을 완전히 오용하고 있는가?

덕분에

+0

당신의 정의는 괜찮아 보입니다. 그 두 개의 segfault에서 어느 라인을 찾으십니까? 우리가 그것을 실행할 수 있고 그것이 무엇을하는지 볼 수 있도록 실행중인 완전한 코드를 게시하십시오. –

+0

감사합니다. 이후이 아이디어를 삭제했습니다. 그것이 지속되는 동안 멋졌다. –

+0

반복자를 확인하십시오 ... if (fdv.end()! = it)'.... – sehe

답변

1

난 당신이 카테고리 이름을 찾기 위해 보고서 이름으로 분류 인덱스를 사용하고 생각합니다.