集合论数据结构
Set theory data structure
我有函数式编程背景,不习惯(高效的)c++数据结构。我需要一个数据结构,保持多个元素,如在struct element
描述。在集合中,字段id必须是唯一的。
我想执行一个非常快速的集合比较,就像在集合理论中,例如,当比较集合{x1,x2,x3}
和{x4,x5}
时,我想确定交集集{x5}
(或{x2}
,在这种情况下是相等的),并从其他集合中减去集合,如{x1,x2,x3} {x5} = {x1,x3}
。
有没有……c++世界里的"集合论"数据结构?
struct element {
int id;
float value;
};
struct element x1 = {1, 1.0};
struct element x2 = {2, 2.0};
struct element x3 = {3, 3.0};
struct element x4 = {3, 3.1};
struct element x5 = {2, 2.0};
有std::set
,它实现了动态集合(动态意味着元素可以插入或删除)。为了使它与element
结构一起工作,您需要一个只查看id
的自定义比较函数。或者,您可以使用std::map<int, float>
,这可能更适合您的问题。
要找到两个集合的交集,使用std::set_intersection
算法。这需要排序范围,其中包括std::set
或std::map
中的迭代器范围。对于差异,使用std::set_difference
我只是想提一下,因为在处理集合时有一个非常好的数据结构,但它并不能满足你的所有需求,
但是你仍然可以记住它,如果你有这样的要求,
1)查询一个元素属于哪个集合
2)不同集合
的并集都在次对数时间内,即几乎是常数。它叫做不相交集数据结构http://en.wikipedia.org/wiki/Disjoint-set_data_structure
struct element {
int id;
float value;
element(int id_=0, float value_=0.0) : id(id_), value(value_) {}
bool& operator==(const element& e) const
{
return id==e.id && value==e.value;
}
};
element e1(1,1.0);
std::set<element> set_;
set_.insert(e1);
检查std算法可以执行的操作。http://www.cplusplus.com/reference/algorithm/
相关文章:
- 链表,反向函数,数据结构
- 如何使用set实现无序数据结构?
- 我们可以将数据永久保存为数据结构吗?
- C++中的可变长度数组/数据结构
- 用于存储由空格分隔的字符串的 C++/C 数据结构
- 通过 NIF 从C++返回自定义数据结构
- 编译器上的策略数据结构不起作用
- 尝试构建"lock-free"数据结构C++
- 设计将引用元素移动到开头的数据结构.C++
- 在学习数据结构之前对STL有一个了解是好的吗?
- 如何解析表示树状数据结构的字符串
- 我对数据结构、双向链表有一些问题
- googletest:测试太大的数据结构
- C++中deque数据结构的大O是什么?
- 我可以使用哪种数据结构来处理这种方式
- 将文本文件解析为树状数据结构
- C++ 中具有 O(1) 搜索时间复杂度的数据结构
- 哪些存储了不完整类型的 STL 数据结构可以用作类成员?
- C++,您能否设计一种数据结构,将指针保存在连续内存中并且不会使它们失效?
- 集合论数据结构