2014-07-22 117 views
0

我試圖將對象存儲在boost multi-index容器中。多索引中的多個唯一鍵

這些對象都是唯一的,可以通過2個獨立的鍵(也是唯一的)進行檢索。

namepsace bm = boost::multi_index; 

class MyObj { 
string strid_; 
int32_t numid_; 
}; 

//! associative container searchable by ClOrdId and Sunofia Id. 
typedef boost::multi_index_container< MyObj, 
bm::indexed_by< 
    bm::ordered_unique< 
    bm::member<MyObj,string,&MyObj::strid_> 
    >, 
    bm::ordered_unique< 
    bm::member<MyObj,int32,&MyObj::numid_> 
    > 
>    
> Cntr; 
Cntr cntr_; 

當我試圖找到整數我用下面的代碼

int32_t to_find = 12; 
Cntr::iterator it = cntr_.find(id); 

但它不會編譯指數的任何元素,我得到以下錯誤

error: invalid conversion from ‘int’ to ‘const char*’ 

當我用字符串使用相同的代碼時,它工作正常;你知道我做錯了什麼嗎?

回答

2
auto it = cntr_.get<1>().find(id); 

每個索引被單獨訪問(通過get),並且具有其自身的成員函數,迭代器等(如果你不能使用autoitCntr::nth_index<1>::type::iterator型的。)更多信息放在doc tutorial

+0

嗨!它工作正常!我非常感謝你! –

+0

嗨!只是注意到你是創建庫的人!!!啊!好的東西的確如此,大量的代碼行少寫! :) –

+0

很高興知道它是有用的:-) –