3

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

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

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

4

2 回答 2

0

我将声明名为:的类或结构:Point包含两个 int 变量并将每个点推送到图形(现在需要vector<Point>),然后将图形推送到您的集合(您也可以声明名为: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 ://docs.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 的答案,我仍然建议您使用常规集

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

于 2020-07-05T21:01:56.743 回答
0

只是为了激发您的兴趣:

住在科利鲁

#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

然而,真正重要的独特性并不常见。你想看图同态吗?你想解决什么问题?

于 2020-07-05T21:22:17.973 回答