【发布时间】:2016-10-06 20:42:18
【问题描述】:
给定一组建模为:
struct Foo { int id; std::string name; };
其中id 是唯一的,name 是非唯一/非{null|empty}。
如何使用 boost::multi_index 之类的数据结构,它可以让我执行以下操作:
select id, name from Foo group by name order by id
标准的 STL 容器无法将我带到应许之地。我使用上面的 sql 变体只是为了表达我的观点。我并没有真正处理任何数据库。
更新:
所以,显然我只需要:
typedef boost::multi_index_container<
Foo,
indexed_by<
ordered_unique<identity<Foo>>,
ordered_unique<member<Foo, std::string, &Foo::name>>
>
> MIC;
有人可以确认我做对了吗?它似乎工作。我还没有测试过。
【问题讨论】:
-
@Treycos 它根本不是重复的。请再次查看我的 sql 查询。我没有要求按 id 排序,然后按名称排序。我说我想按 id 排序,同时将所有 相同 名称分组并在其中分配 any id。所以 {1, "Foo"} {2, "Bar" } {3, "Foo"} 最终会返回 {1, "Foo"} {2, "Bar"} OR {2, "酒吧"} {3, "Foo"}
-
比我更有魔力的人可以删除“这个问题可能已经有答案”的标签吗?它看起来不适合我的情况。
标签: c++ stl boost-multi-index