2016-10-23 54 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索引。

相关问题