- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
假设我有一个类来保存传感器测量值,我创建了一个 boost 多索引容器,其中包含时间的复合键和每个测量值的 id:
namespace {
struct ValueUpdateMsg {
double value;
uint64_t time;
int id;
};
struct time_id {
};
struct id_time {
};
using value_set_t = bmi::multi_index_container<
ValueUpdateMsg,
bmi::indexed_by<
bmi::ordered_unique<
bmi::tag<struct id_time>,
bmi::composite_key<ValueUpdateMsg,
bmi::member<ValueUpdateMsg, decltype(ValueUpdateMsg::id), &ValueUpdateMsg::id>,
bmi::member<ValueUpdateMsg, uint64_t, &ValueUpdateMsg::time>
>
>,
bmi::ordered_unique<
bmi::tag<struct time_id>,
bmi::composite_key<ValueUpdateMsg,
bmi::member<ValueUpdateMsg, uint64_t, &ValueUpdateMsg::time>,
bmi::member<ValueUpdateMsg, decltype(ValueUpdateMsg::id), &ValueUpdateMsg::id>
>
>
>
>;
}
value_set_t container;
container.insert(ValueUpdateMsg{1, 0, 1.0});
container.insert(ValueUpdateMsg{1, 1, 2.0});
container.insert(ValueUpdateMsg{3, 0, 3.0});
container.insert(ValueUpdateMsg{3, 2, 4.0});
container.insert(ValueUpdateMsg{5, 0, 5.0});
container.insert(ValueUpdateMsg{5, 1, 6.0});
我想找到 id=2
且更新时间小于等于 4 的节点。我如何在 boost-multi-index 容器中做到这一点?
我可以执行以下操作:
auto id2_range = boost::make_iterator_range(container.get<id_time>().equal_range(std::make_tuple(2)));
获取 id == 2
的值范围并执行线性(或二进制)搜索以找到其时间与查询匹配的节点。在 boost multi-index 中有更好的方法吗?
最佳答案
auto id2_range = boost::make_iterator_range(
container.get<id_time>().lower_bound(2),
container.get<id_time>().upper_bound(std::make_tuple(2,4))
);
关于c++ - 如何在复合键控提升多索引容器的一个键上执行 equal_range 并在第二个键上执行 lower_bound?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54338727/
我有以下代码,将结构保存到 boost::ptr_vector 容器中。我现在正在尝试通过 equal_range 为这个容器编写一个简单的搜索函数。我选择该函数是因为我想要一个指向序列元素的指针(如
#include #include #include int main() { boost::property_tree::ptree ptree; const std::str
我正在制作一个自定义容器,它使用 STL 列表容器作为其内部结构。我要添加到此容器中的项目之一是 equal_range。 我的 equal_range 的代码在这里: template typen
多线程访问是否需要同步 pair equal_range (const value_type& val) const; 由于 equal_range 是读取操作,因此可能不需要。请给出意见。 最佳答案
我在 C++ 中使用多重映射的相等范围。在我的例子中,同一个键可以有多个条目——因此是多映射。我想知道返回的迭代器是否会按定义的顺序交付项目,还是留给 STL 的实现器。例如,我将在 multimap
我有以下无序 multimap : std::tr1::unordered_multimap duplicates; 然后我尝试使用以下方法获取键的值 std::pair,std::tr1::unor
cplusplus.com 网站上提供了使用 equal_range 的示例: int main () { std::multimap mymm; mymm.insert(std::p
我希望 unordered_multimap::equal_range 具有平均恒定的复杂度,但是以下内容并不像预期的那样随 n 线性扩展: #include #include #include
在讨论multimap和我的学生一起,我注意到一个小的变化可以减少一些样板文件,我想知道是否有人向标准委员会建议过它,如果是的话,回应是什么。 在相等范围内迭代的规范方法是(取自 cplusplus.
我怎么知道 equal_range 没有找到任何匹配案例? 喜欢: multimap mapdic; pair::iterator,multimap::iterator> ret; // insert
我有这段代码,但我无法理解 equal_range 方法返回迭代器的部分。我知道范围是 pair 对象,里面有两个 multimap 对象,但我不明白的是为什么有 'for (it = range.f
我看到一些旧的、非标准的 equal_range 文档明确调用了严格的弱排序(旧的 SGI 文档)和一些更新的、标准的 equal_range 没有(cppreference、libstdc++ 文档
std::equal_range关于 cppreference.com 的文档显示了一个可能的实现: template std::pair equal_range(ForwardIt firs
我有一个使用 map 的性能敏感函数存储一些数据。 我需要能够使用任何 sub string 查找值 其他一些 string作为 key ,无需创建中间层 string (即,目标是防止仅仅因为我想查
下午好,我发现 std:multimap::equal_range 有时会返回不正确的结果。这可能吗?如果是这样,我的代码或指针的哈希函数中是否有解决方法或错误。谢谢。 这是我的代码的摘录: type
在 C++ prime 5 Ed 第 11 章中。关联容器。 “表 11.7。在关联容器中查找元素的操作”: 据说:“c.equal_range(k) 返回一对迭代器,表示具有键 k 的元素。如果 k
我正在使用 find、equal_range 和我自己的二进制搜索函数进行一些测试,但我很难理解为什么 equal_range 与 find 相比需要这么长的时间。 我有一个排序 vector ,我计
我的理解是,我们不能对无序...容器中元素的顺序做出任何假设(即使它们是通过哈希表实现的)。如果那是正确的,那么 std::unordered_multiset::equal_range() 如何返回
假设我有一个类来保存传感器测量值,我创建了一个 boost 多索引容器,其中包含时间的复合键和每个测量值的 id: namespace { struct ValueUpdateMsg {
下午好,我想知道std::multimap::equal_range 的时间复杂度是多少?它是 Big-O(n) 还是 BIG-0(log n)。我记得读过 std::multimap::erase
我是一名优秀的程序员,十分优秀!