Boost MultiIndexContainer 如何使用不同的组合键进行搜索
Boost MultiIndexContainer how to use different composite keys to search?
typedef multi_index_container<PositionSummary*,
indexed_by<
ordered_unique<
composite_key<PositionSummary, const_mem_fun<PositionSummary, int, &PositionSummary::positiondate>,
const_mem_fun<PositionSummary, const std::string&, &PositionSummary::accountid>,
const_mem_fun<PositionSummary, const std::string&, &PositionSummary::instid> > >,
ordered_unique<
composite_key<PositionSummary, const_mem_fun<PositionSummary, int, &PositionSummary::positiondate>,
const_mem_fun<PositionSummary, const std::string&, &PositionSummary::instid>,
const_mem_fun<PositionSummary, const std::string&, &PositionSummary::accountid> > >
> > PositionSummaryContainer;
我可以像下面这样搜索第一个"ordered_unique",如下所示:
PositionSummaryContainer::iterator it = psContainer_.find(boost::make_tuple(date, accountID, instID));
但是,如何根据第二个"ordered_unique"进行搜索呢?既然帐户ID和instID都是字符串?如何告诉程序要使用哪个索引?
按数字 ( get<i>()
( 或按标签(使用 bmi::tag<T>
(使用索引。
我将展示一个示例:
丽芙斯在科里鲁
#include <boost/multi_index_container.hpp>
#include <boost/multi_index/ordered_index.hpp>
#include <boost/multi_index/mem_fun.hpp>
#include <boost/multi_index/composite_key.hpp>
struct PositionSummary {
int positiondate() const { return 42; }
std::string const& accountid() const { return acc; }
std::string const& instid() const { return ins; }
private:
std::string acc = "a";
std::string ins = "a";
};
namespace bmi = boost::multi_index;
typedef boost::multi_index_container<PositionSummary*,
bmi::indexed_by<
bmi::ordered_unique<
bmi::tag<struct byPosAccInst>,
bmi::composite_key<PositionSummary,
bmi::const_mem_fun<PositionSummary, int, &PositionSummary::positiondate>,
bmi::const_mem_fun<PositionSummary, const std::string&, &PositionSummary::accountid>,
bmi::const_mem_fun<PositionSummary, const std::string&, &PositionSummary::instid>
> >,
bmi::ordered_unique<
bmi::tag<struct byPosInstAcc>,
bmi::composite_key<PositionSummary,
bmi::const_mem_fun<PositionSummary, int, &PositionSummary::positiondate>,
bmi::const_mem_fun<PositionSummary, const std::string&, &PositionSummary::instid>,
bmi::const_mem_fun<PositionSummary, const std::string&, &PositionSummary::accountid>
> >
> > PositionSummaryContainer;
int main()
{
PositionSummaryContainer c;
c.insert(new PositionSummary());
{
auto& index = c.get<0>();
auto it = index.find(boost::make_tuple(42, "a", "a"));
}
{
auto& index = c.get<1>();
auto it = index.find(boost::make_tuple(42, "a", "a"));
}
// by tag:
{
auto& index = c.get<byPosAccInst>();
auto it = index.find(boost::make_tuple(42, "a", "a"));
}
{
auto& index = c.get<byPosInstAcc>();
auto it = index.find(boost::make_tuple(42, "a", "a"));
}
}
相关文章:
- 有根的二进制搜索树.保留与其父级的链接
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 可组合的lambda/std::函数与std::可选
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 在C++中搜索嵌套多映射值
- cpp二进制搜索问题,计算给定数组中输入元素的出现次数
- 二进制搜索树叶数问题
- 混合组合和继承的C++问题
- 为什么二进制搜索在我的测试中不起作用
- 我需要将多个函数组合为一个函数
- 构建可组合有向图(扫描仪生成器的汤普森构造算法)
- 正在尝试重载二进制搜索树分配运算符
- c++binary_search函数排序数组(流行名称搜索)出现问题
- 顶部带有搜索框的组合框
- 如何搜索向单词添加字母的所有可能组合?
- 多种搜索组合的数据结构设计
- 从给定的 IPv6:端口列表中搜索 IPv6:端口组合的最快搜索算法是什么 O(1) 时间一致性
- C++以广度优先搜索的方式查找多个数组中元素的所有组合
- Boost MultiIndexContainer 如何使用不同的组合键进行搜索
- 深度优先搜索或回溯递归查找字谜/拼字板中所有可能的字母组合