C++ 代码示例:从容器中删除访问过的边
C++ 代码示例:从容器中删除访问过的边
本文提供一个 C++ 代码示例,演示如何使用 unordered_set 判断并删除容器中访问过的边。
假设 result 是一个容器,其中存储了多个边。每个边都有 src 和 tgt 两个属性,表示边的起始节点和目标节点。我们可以使用一个 unordered_set 来记录已经访问过的边。具体的 C++ 代码如下:
#include <unordered_set>
struct Edge {
int src;
int tgt;
// 其他属性...
};
bool isVisited(const Edge& edge, std::unordered_set<std::pair<int, int>>& visitedEdges) {
return visitedEdges.count(std::make_pair(edge.src, edge.tgt)) > 0;
}
void deleteVisitedEdges(std::vector<Edge>& result, std::unordered_set<std::pair<int, int>>& visitedEdges) {
auto it = result.begin();
while (it != result.end()) {
if (isVisited(*it, visitedEdges)) {
it = result.erase(it);
} else {
++it;
}
}
}
int main() {
std::vector<Edge> result = { {1, 2}, {2, 3}, {3, 4}, {4, 5} };
std::unordered_set<std::pair<int, int>> visitedEdges = { {2, 3}, {4, 5} };
deleteVisitedEdges(result, visitedEdges);
// 输出删除后的边
for (const auto& edge : result) {
std::cout << edge.src << ' -> ' << edge.tgt << std::endl;
}
return 0;
}
在上述代码中,我们定义了一个 isVisited 函数来判断某个边是否被访问过。该函数接受一个 Edge 对象和一个 unordered_set 作为参数,使用 pair<int, int> 作为 unordered_set 的键来表示边的起始节点和目标节点。如果在 unordered_set 中找到了这个键对,说明这条边被访问过。
然后我们定义了一个 deleteVisitedEdges 函数,用于删除已经访问过的边。该函数接受一个 result 容器和一个 visitedEdges 的 unordered_set。它会遍历 result 容器中的每条边,如果发现该边被访问过,则使用 erase 函数将其从 result 容器中删除。
在 main 函数中,我们定义了一个 result 容器和一个 visitedEdges 的 unordered_set,分别表示所有边和已经访问过的边。然后调用 deleteVisitedEdges 函数来删除已经访问过的边,并输出删除后的边的起始节点和目标节点。
代码说明:
unordered_set是一个无序关联容器,可以用于存储唯一的键值对。std::make_pair函数用于创建pair对象。count函数用于检查unordered_set中是否存在某个键。erase函数用于从容器中删除元素。
总结:
本文提供了一个 C++ 代码示例,演示了如何使用 unordered_set 判断并删除容器中访问过的边。该代码示例展示了如何定义 Edge 结构体、使用 unordered_set 记录访问状态、以及使用迭代器遍历容器并删除元素。希望本文能够帮助您更好地理解和使用 C++ 语言中的相关数据结构和算法。
原文地址: https://www.cveoy.top/t/topic/fAJl 著作权归作者所有。请勿转载和采集!