区间范围树数据结构 C++
interval range tree datastructure c++
>我有一个要求,我必须根据某个属性值更新图形前端的颜色。属性值具有不同的范围....比如说-30到-45,-60到-80等等.....所以,我需要一个数据星,我可以在其中存储这些范围(预填充它们)....当我确定这个点时,我想知道这个点落在O(1)时间或O(logN)时间的范围。因此,我的查询将包含一个点,输出应该是包含该点的唯一范围......
我在范围树和分段树之间感到困惑....我想在 C++ STL 映射之上构建树。
你需要的叫做区间树。 http://en.wikipedia.org/wiki/Interval_tree。不幸的是,你不能使用std::set<>
来获取O(log N)插入,删除和查询,因为树节点需要包含额外的数据。您可以在此处阅读有关它们的信息 http://syedwaqarahmad.webs.com/documents/t.科尔门-_introduction_to_algorithms_3rd_edition.pdf第 14.3 章.
相反,您可以使用增强。它具有间隔容器库。
http://www.boost.org/doc/libs/1_46_1/libs/icl/doc/html/index.html
也许这个库可以帮助你:https://github.com/ekg/intervaltree
如果我理解正确,你可以用 std::set 很容易地解决这个问题:
#include <iostream>
#include <set>
struct Interval {
int min;
int max;
};
struct ComInt {
bool operator()(const Interval& lhs, const Interval& rhs){
return lhs.max < rhs.min;
}
};
std::set<Interval, ComInt> intervals = { { -10, -5 }, { -4, 4 }, { 5, 10 } };
int main() {
int point = 3;
Interval tmp = { point, point };
auto result=intervals.find(tmp);
if (result != intervals.end()) {
std::cout << "Min:" << result->min << " - Max:" << result->max << std::endl;
} else {
std::cout << "No matching Interval found" << std::endl;
}
}
当然,你应该围绕它构建一个包装类
相关文章:
- 链表,反向函数,数据结构
- 如何使用set实现无序数据结构?
- 我们可以将数据永久保存为数据结构吗?
- C++中的可变长度数组/数据结构
- 用于存储由空格分隔的字符串的 C++/C 数据结构
- 通过 NIF 从C++返回自定义数据结构
- 编译器上的策略数据结构不起作用
- 尝试构建"lock-free"数据结构C++
- 设计将引用元素移动到开头的数据结构.C++
- 在学习数据结构之前对STL有一个了解是好的吗?
- 如何解析表示树状数据结构的字符串
- 我对数据结构、双向链表有一些问题
- googletest:测试太大的数据结构
- C++中deque数据结构的大O是什么?
- 我可以使用哪种数据结构来处理这种方式
- 将文本文件解析为树状数据结构
- C++ 中具有 O(1) 搜索时间复杂度的数据结构
- 哪些存储了不完整类型的 STL 数据结构可以用作类成员?
- C++,您能否设计一种数据结构,将指针保存在连续内存中并且不会使它们失效?
- 带参数的数据结构的全局声明