如何写向量的无序向量集,即unordered_set<向量<向量<int>>集合?

How to write unordered set of vector of vector, namely unordered_set<vector<vector<int>> set?

本文关键字:向量 lt gt 集合 set int unordered 无序 何写      更新时间:2023-10-16

我想有一个集合来存储几个图形,每个图形有几个点,每个点都有自己的坐标。所以这是我的代码:

unordered_set<vector<vector<int>> set;
vector<vector<int>> graph;
graph.push_back({1,1});
graph.push_back({2,2});
set.insert(graph);

然后失败表明该集合期望两个参数,但提供了一个。 我知道对于这个问题,最好建立一个数据结构来存储点和图形。但我只想知道为什么这不能通过一套来实现?

只是为了激发你的兴趣:

住在科里鲁

#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/graph_utility.hpp>
#include <iostream>
int main() {
using Graph = boost::adjacency_list<>;
std::list<Graph> set;
Graph graph(3);
add_edge(1, 1, graph);
add_edge(2, 2, graph);
set.push_back(graph);
for (auto& g : set) {
print_graph(g);
}
}

指纹

0 --> 
1 --> 1 
2 --> 2 

在集合中使用

规定元素是"唯一的"。所以他们必须知道如何比较元素:

  • std::set 需要一个弱总订单(基本上是a < b
  • (
  • std::unordered_set 需要一个哈希 + 相等性测试(基本上是std::hash<Graph>(a)a == b(

然而,独特性实际上并不常见。你想看看图同态吗?你想解决什么问题?

我会声明名为:的类或Point结构,其中包含两个 int 变量并将每个点推送到图形(现在需要vector<Point>(,然后将图形推送到您的集合(您还可以声明名为:包含 vector 的类或结构Graph( 然后你的代码应该是:

unordered_set<Graph> set;
Graph graph;
graph.push_back(Point(1,1));
graph.push_back(Point(2,2));
set.insert(graph);

另外,我认为您不需要使用unorderd_set,我认为set就足够了,在这种情况下,您的代码将是(没有类(:

std::set < std::vector<std::vector<int>>> set;
std::vector<std::vector<int>> graph;
graph.push_back({ 1, 1 });
graph.push_back({ 1, 1 });
set.insert(graph);

如果你仍然想使用unorderd_ser我会看这里(你需要给unordered_set一个哈希函数(: https://learn.microsoft.com/en-us/cpp/error-messages/compiler-errors-1/compiler-error-c2280?f1url=https%3A%2F%2Fmsdn.microsoft.com%2Fquery%2Fdev16.query%3FappId%3DDev16IDEF1%26l%3DEN-US%26k%3Dk(C2280(%26rd%3Dtrue&view=vs-2019

他们说这是一个已删除的功能,所以unorderd_set的这种使用是 iliglle 检查此链接并得到您的答案 unorderd_set,我仍然为您提供使用常规集

希望我回答了你的问题:(