2016-10-20 9 views
0

객체를 삽입 할 부스트 multi_index를 만들었습니다. 다음과 같이 내 multi_index 보이는부스트에서 삽입 후 찾을 수 없습니다. multi_index

,

typedef boost::multi_index_container< 
    Container*, 
    boost::multi_index::indexed_by< 
     boost::multi_index::hashed_unique< 
      boost::multi_index::tag<IndexByUniqueId>, 
      boost::multi_index::const_mem_fun<StoreMe, Id, &StoreMe::getUId> 
     >, 
     boost::multi_index::hashed_non_unique< 
      boost::multi_index::tag<IndexByNonUId>, 
      boost::multi_index::const_mem_fun<StoreMe, std::string, &Container::getNUIdString> 
     > 
    > 
> mi_Container; 

나는 비 고유 ID 객체와 고유 ID가 처음 객체에 존재하지 않는 삽입

. 나중에 프로그램 과정에서 업데이트되고 "getNUIdString"및 "getUId"는 0/비어 있지 않은 값을 반환합니다.

비 고유 ID를 사용하여 조회하려고 할 때 저장된 값을 가져올 수 없습니다. 그것이 삽입 될 때 그들이 채워질 것으로 예상됩니까? 또는 그들이 필요할 때 업데이트되고 그 순간에도 여전히 가치를 찾을 수 있다면 괜찮습니까?

EDIT1 :

내가 "교체"또는 인덱스를 변경하는 동안 "수정"을 사용하여 인덱스를 업데이트 할 필요가 있음을 이해합니다. 그래서 처음에는 빈 문자열을 삽입 기호를 한 색인의 키로, 다른 색인을 0으로 삽입하는 동안 특정 값을 사용하여 조회 할 때 아무것도 반환하지 않습니까? ""빈 문자열 ""을 사용하여 검색하면됩니다. 그것은 나에게 모든 값을 반환해야합니다 (따라서 조회 시간 O (n)이됩니까)?

편집 2 : 모든 값을 ""빈 문자열에 매핑하려고했습니다. 나는 여전히 결과가 없습니다. 이터레이터 쌍 중 첫 번째는 end()와 같습니다.

키의 값을 으로 변경하려는 경우 해당 개체에 대한 설정자에서 값을 설정할 때 non_unique 키 값 쌍 중 하나만 쌍으로 변경하려면 어떻게해야합니까? 나는 객체에 대한 setter를 통해 값을 설정할 때마다 그것을하고 싶을 것이므로, 내가 가지고있는 multi_index를 사용하여 그것을 찾을 수있다. 작은 맥락으로

TIA는

-R

답변

1

하나는 추측 할 수 제공합니다. (이 정말 클래스가 아닌 기본 유형의 별칭 인 경우)

  • 당신이 당신의 Id 클래스에 대해 올바르게 비어있는 삽입 한
  • 모든 요소를 ​​boost::hash_valueoperator==를 구현 한 것을 제공 당신은 정말 뭔가를 삽입하는 관리
  • IndexByNonUId 인덱스의 키와 같은 문자열,
  • 요소 나는 그들이 유형 Container *의 그래서 그들은 생각할 삭제 될 수있어 또는 참조 (유효, (즉 컨테이너가 비어 있지 않습니다) 무언가),
  • ,
  • 당신은

다음가 빈 범위보다 다른 무언가를 반환해야 IndexByNonUId 인덱스에서 널 (null) 문자열을 찾고, 요소의 키를 변경되지 않았습니다. 위의 모든 조항을 확인하십시오.

+0

Thanks @Joaquin!귀하의 질문에 대한 답변은 다음과 같습니다 – codeworks

+0

* 색인은 std :: string을 반환합니다 * 예 * 예, 디버거로 검사했습니다. 컨테이너에 27xxx 객체가 있습니다. * 그렇게 생각합니다. be * 예, 대체 키 또는 유사한 키를 사용하여 요소의 키를 변경하지 않았습니다. 아니요, equal_range ("")는 첫 번째가 containers.end()와 같은 쌍을 반환합니다. – codeworks

+0

필요한 경우 알려주십시오. 자세한 정보는 귀하를 위해 제공 할 수 있습니다. 다시 한 번 감사드립니다 – codeworks