【发布时间】:2018-06-22 00:29:27
【问题描述】:
我在 employee 类上有一个 boost 多索引容器(取自 boost 官方文档):
typedef multi_index_container<
employee,
indexed_by<
ordered_unique<
tag<id>, BOOST_MULTI_INDEX_MEMBER(employee,int,id)>,
ordered_non_unique<
tag<name>,BOOST_MULTI_INDEX_MEMBER(employee,std::string,name)>,
ordered_non_unique<
tag<age>, BOOST_MULTI_INDEX_MEMBER(employee,int,age)> >
> employee_set;
下面是容器中由(id, name, age)打印的数据示例:
0 Joe 31
1 Robert 27
2 John 40
3 Albert 20
4 John 57
5 John 58
6 John 22
我想要一个按年龄(最后一个字段)排序的名称为 John 的所有项目的迭代器。我尝试了equal_range 方法:
auto iter1 = boost::make_iterator_range(es.get<name>().equal_range("John"));
它返回一个迭代器,其中包含名称为 John 的所有记录。如何使这个迭代器按第三个索引(即年龄)排序?
输出应该是:
6 John 22
2 John 40
4 John 57
5 John 58
【问题讨论】:
-
很遗憾您没有包含完整的工作代码。我现在自己做一个,但我可能没有时间回答这个问题
-
@sehe 对不起,下次我将代码添加到问题中。代码来自 boost 文档的第一个示例。 (boost.org/doc/libs/1_62_0/libs/multi_index/example/basic.cpp)
-
是的,文档的链接将是一个好的开始。我知道文档包含不止一个示例 :)
标签: c++ boost boost-multi-index