如何使用set实现无序数据结构?
How to implement an unordered data structure using set?
我想为我的 Face 结构构建一个无序集合,即
class myFace
{
public:
//the three points
int u;
int v;
int k;
myFace() = default;
myFace(int u, int v, int k) : u(u), v(v), k(k) {}
bool operator< (const myFace& e) const
{
bool result = true;
min(u, v, k);
if ((u == e.u && v == e.v && k == e.k) ||
(u == e.u && v == e.k && k == e.v) ||
(u == e.v && v == e.u && k == e.k) ||
(u == e.v && v == e.k && k == e.u) ||
(u == e.k && v == e.u && k == e.v) ||
(u == e.k && v == e.v && k == e.u))
{
result = false;
}
return result;
}
};
我想确保:
set<myFace> con;
myFace f1(1,2,3);
myFace f2(2,3,1);
myFace f3(3,1,2);
con.insert(f1);
con.insert(f2);
con.insert(f3);
cout << con.size() << endl;
输出应为 1。 由于 f1,f2,f3 是相同的。
或者我们可以说如何实现 3 个无序元素的集合,即 123,132,213,231,312,321 都是相同的。
秘诀是,为您的类使用正确的比较器并将其提供给集合。我在这里对集合使用了类似的方法。
我调整了这个解决方案并创建了以下示例代码:
#include <iostream>
#include <set>
#include <vector>
#include <algorithm>
struct myFace
{
//the three points
int u;
int v;
int k;
myFace() = default;
myFace(int u, int v, int k) : u(u), v(v), k(k) {}
};
struct Comparator {
bool operator () (const myFace& lhs, const myFace& rhs) const {
// Convert the structs to vectors
std::vector<int> v1 = { lhs.u, lhs.v, lhs.k };
std::vector<int> v2 = { rhs.u, rhs.v, rhs.k };
// Sort them
std::sort(v1.begin(), v1.end());
std::sort(v2.begin(), v2.end());
// Compare them
return v1 < v2;
}
};
int main() {
std::set<myFace, Comparator> con;
myFace f1(1, 2, 3);
myFace f2(2, 3, 1);
myFace f3(3, 1, 2);
con.insert(f1);
con.insert(f2);
con.insert(f3);
std::cout << con.size() << std::endl;
return 0;
}
我发现 use set 可以实现目标:为 3 个无序元素实现一个集合,即 123,132,213,231,312,321 都是相同的。
set<int> face;
face.insert(1);
face.insert(2);
face.insert(3);
set<int> face2;
face2.insert(2);
face2.insert(1);
face2.insert(3);
set<int> face3;
face3.insert(3);
face3.insert(1);
face3.insert(2);
set<set<int>> faces;
faces.insert(face);
faces.insert(face2);
faces.insert(face3);
cout << "----" << endl;
cout << faces.size() << endl;
相关文章:
- 链表,反向函数,数据结构
- 如何使用set实现无序数据结构?
- 我们可以将数据永久保存为数据结构吗?
- C++中的可变长度数组/数据结构
- 用于存储由空格分隔的字符串的 C++/C 数据结构
- 通过 NIF 从C++返回自定义数据结构
- 编译器上的策略数据结构不起作用
- 尝试构建"lock-free"数据结构C++
- 设计将引用元素移动到开头的数据结构.C++
- 在学习数据结构之前对STL有一个了解是好的吗?
- 如何解析表示树状数据结构的字符串
- 我对数据结构、双向链表有一些问题
- googletest:测试太大的数据结构
- C++中deque数据结构的大O是什么?
- 我可以使用哪种数据结构来处理这种方式
- 将文本文件解析为树状数据结构
- C++ 中具有 O(1) 搜索时间复杂度的数据结构
- 哪些存储了不完整类型的 STL 数据结构可以用作类成员?
- C++,您能否设计一种数据结构,将指针保存在连续内存中并且不会使它们失效?
- 如何用树数据结构有效地实现无序映射