2016-10-23 2 views
0

Документация для контейнеров Boost multiindex, по-видимому, указывает, что я могу использовать его как набор после объявления индекса для итерации. Так что мне было интересно, если это возможно, чтобы скрыть реализацию наддува и вернуть итератор замаскирован в качестве итератора к std::setВозвратите итератор для увеличения контейнера multiintex как std :: set <> :: iterator

Ex: Header

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 (a std::multiset, фактически), но это не одно. Типы этих не связанных между собой контейнеров различаются, и вы не можете передавать их друг другу.

Возможно, вы можете пересмотреть, почему вам необходимо передать iterator в индекс multi_index_container в качестве std::set::iterator.

Смежные вопросы