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 的索引。