c++ - 是否可以让 boost multi_index 容器索引一个具有 2 个键值的元素?
问题描述
我想让我的 boost multi_index 容器索引一个元素,该元素在同一索引上有多个键值。那可能吗?
struct Student {
int Id;
std::unordred_set<std::string> Clubs;
};
假设这个学生属于技术和电影俱乐部,并且我在 Id 上有唯一的散列索引,在俱乐部上有 non_unique 的散列索引(我想通过查看俱乐部名称来了解每个俱乐部中的学生)。
我希望能够通过使用 boost multi_index 搜索“技术”或“电影”来找到同一个学生。是否可以使用 boost 或者我需要推出自己的数据存储?
解决方案
您不能使用包含您的Student
类型的 multi_index 来执行此操作,但您可以使用(基于它的东西)与不同的类型。
using Id_t = int;
using Club_t = std::string;
using StudentClubs = boost::bimap<boost::bimap::multiset_of<Id_t>, boost::bimap::multiset_of<Club_t>>;
StudentClubs student_clubs = /* some data */;
然后您可以查找电影俱乐部中的所有学生
for (auto [club, student] : boost::iterator_range(student_clubs.right.equal_range("movie"))) {
std::cout << student;
}
或者学生 3 所在的所有俱乐部
for (auto [student, club] : boost::iterator_range(student_clubs.left.equal_range(3))) {
std::cout << club;
}
推荐阅读
- asterisk - 呼叫文件中的最长等待时间
- winapi - LVN_GETEMPTYMARKUP 字体
- android - 如何在 Xamarin.Forms Webview 中使用自签名证书处理 SSL 错误?
- asp.net-mvc - 如何将带有 Url.Action 的 html.TextBox 值发送到控制器操作方法输入参数?
- r - 使用 R 连接到 DynamoDB
- windows - Azure VM Windows Server 2016 键盘日语输入英语
- cplex - CPLEX 编程计数器跳过值
- operating-system - 我将如何为自己的内核制作设备驱动程序?
- c - 解决指针转换警告
- python - 修复 python Sqlalchemy 模型无法插入 mysql 语法错误