gpt4 book ai didi

c++ - C++ 中的 vector 和 map

转载 作者:太空宇宙 更新时间:2023-11-04 14:20:20 25 4
gpt4 key购买 nike

我有一个 vector A [9 3 6 9 3 6],每 2 个元素代表一个图的边,我想从这个 vector 创建邻接矩阵。

首先,我创建了唯一 vector A [3 6 9] 以了解矩阵的大小

然后我创建一个矩阵并用 0 填充它

第三,我将在 A 上运行一个循环以了解连接了哪些边,我的问题是我如何告诉 C++ A 中的第一个元素 3 实际上代表矩阵中的元素 0,6 代表 1 9 由 3 表示,就像这样,当我构建邻接矩阵时,我知道 0 1 2 实际上代表 3 6 9,我听说过使用映射但不知道如何在我的程序中构建它,因为我是 C++ 的新手。

最佳答案

您实质上是在尝试跟踪顶点的标签。如果每个顶点都有一个顺序分配的编号,您可以扫描新的顶点标签并将相应的顺序编号插入 map 中,如下所示:

std::map<int, std::size_t> labels;  // "int" is the label type; could be anything!

std::size_t store_vertex_label(int v)
{
std::map<int, std::size_t>::const_iterator const it = labels.find(v);

if (it != labels.end()) return it->second;

const std::size_t new_number = labels.size();
labels.insert(std::make_pair(v, new_number);
return new_number;
}

现在当你处理你的输入时,你一次读取一个标签标记 v,将它发送到 store_vertex_label(),然后你得到相应的顺序顶点索引.

您的邻接矩阵的大小将是 labels.size() 的平方。

请注意,您的标签类型不必是整数,它可以是任何东西(例如字符串)。

关于c++ - C++ 中的 vector 和 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8122028/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com