Return 将 multiintex 容器提升为 std::set<>::iterator 的迭代器
Return an iterator to boost multiintex container as a std::set<>::iterator
Boost 多索引容器的文档似乎表明我可以在声明要迭代的索引后将其用作集合。所以我想知道是否有可能隐藏 boost 实现和 return 一个伪装成 std::set
的迭代器的迭代器
例如:页眉
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;
}
有没有可能做这样的事情?以及如何?
不,你不能。您定义的 EmployeeSet
的工作方式类似于 std::set
(实际上是 std::multiset
),但它不是一个。这些不相关的容器的 iterator
类型不同,您不能将一个作为另一个传递。
也许您可以重新考虑为什么需要将 iterator
作为 std::set::iterator
传递给 multi_index_container
的索引。
Boost 多索引容器的文档似乎表明我可以在声明要迭代的索引后将其用作集合。所以我想知道是否有可能隐藏 boost 实现和 return 一个伪装成 std::set
例如:页眉
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;
}
有没有可能做这样的事情?以及如何?
不,你不能。您定义的 EmployeeSet
的工作方式类似于 std::set
(实际上是 std::multiset
),但它不是一个。这些不相关的容器的 iterator
类型不同,您不能将一个作为另一个传递。
也许您可以重新考虑为什么需要将 iterator
作为 std::set::iterator
传递给 multi_index_container
的索引。