gpt4 book ai didi

c++ - 用于类数据库搜索的容器

转载 作者:太空狗 更新时间:2023-10-29 19:41:11 27 4
gpt4 key购买 nike

我正在寻找一些 STL、boost 或类似容器,以使用与在数据库中使用索引相同的方式来使用如下查询来搜索记录:

select * from table1 where field1 starting with 'X';

select * from table1 where field1 like 'X%';

我考虑过使用 std::map,但我不能,因为我需要搜索“以”某些文本开头的字段,而不是“等于”的字段。除此之外,我需要它在多个字段上工作(例如,每个“记录”有 6 个字段),所以我需要为每个单独的 std::map。

我可以创建一个排序的 vector 或列表并使用二进制搜索(通过读取中间的元素并查看它是否大于或小于'X',在每一步中将集合分解为 2),但我想知道是否有我可以使用一些现成的容器而无需重新发明轮子?

最佳答案

Boost.Multi-Index允许您使用多个索引进行管理,它实现了 std::set/map 的 lower_bound。您需要选择该字段对应的索引,然后将其作为 map 或集合进行操作。

Next 之后是一个通用函数,可用于获取几个迭代器,第一个指向以给定前缀开头的第一项,第二个指向以下一个前缀开头的第一项,即搜索结束

template <typename SortedAssociateveContainer>
std::pair<typename SortedAssociateveContainer::iterator,
typename SortedAssociateveContainer::iterator>
starts_with(
SortedAssociateveContainer const& coll,
typename SortedAssociateveContainer::key_type const& k)
{
return make_pair(coll.lower_bound(k),
coll.lower_bound(next_prefix(k));
}

在哪里

  • next_prefix 使用基于 SortedAssociateveContainer 比较器的字典顺序获取下一个前缀(当然,此函数需要更多参数才能完全通用,请参阅 question)。

starts_with 的结果可用于任何范围算法(参见 Boost.Range )

关于c++ - 用于类数据库搜索的容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2689963/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com