2016-10-23 58 views
0

Boost multiindex容器的文檔似乎表明我可以在聲明迭代的索引之後將它用作一個集合。所以我在想,如果有可能隱藏升壓實現並返回一個迭代器僞裝成一個迭代的std::set返回一個迭代器來將multiintex容器提升爲std :: set <> :: iterator

例:頭

typedef multi_index_container< 
    Employee, 
    indexed_by< 
     ordered_non_unique< 
      composite_key< 
       Employee, 
       member<Employee, int, &Employee::id>, 
       member<Employee, int, &Employee::salary> 
      > 
     > 
    > > EmployeeSet; 
const std::set<Employee>::iterator getEmployees(); 

static EmployeeSet employeeSet; 

Test.cc:

const std::set<Test::Employee>::iterator getEmployees(){ 
    std::pair<EmployeeSet::iterator, EmployeeSet::iterator> by_id = 
    employeeSet.equal_range(id); 
    return by_id.first; 
} 

是有可能做這樣的事情?如何?

回答

2

不,你不能。 EmployeeSet你已經定義了一個std::set(實際上是一個std::multiset),但它不是一個。這些不相關的容器的iterator類型是不同的,你不能將其中一個傳遞給另一個。

也許您可以重新考慮爲什麼您需要將iterator作爲std::set::iterator通過multi_index_container索引。

相關問題