C++ 代码示例:从容器中删除访问过的边

本文提供一个 C++ 代码示例,演示如何使用 unordered_set 判断并删除容器中访问过的边。

假设 result 是一个容器,其中存储了多个边。每个边都有 srctgt 两个属性,表示边的起始节点和目标节点。我们可以使用一个 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 容器和一个 visitedEdgesunordered_set。它会遍历 result 容器中的每条边,如果发现该边被访问过,则使用 erase 函数将其从 result 容器中删除。

main 函数中,我们定义了一个 result 容器和一个 visitedEdgesunordered_set,分别表示所有边和已经访问过的边。然后调用 deleteVisitedEdges 函数来删除已经访问过的边,并输出删除后的边的起始节点和目标节点。

代码说明:

  • unordered_set 是一个无序关联容器,可以用于存储唯一的键值对。
  • std::make_pair 函数用于创建 pair 对象。
  • count 函数用于检查 unordered_set 中是否存在某个键。
  • erase 函数用于从容器中删除元素。

总结:

本文提供了一个 C++ 代码示例,演示了如何使用 unordered_set 判断并删除容器中访问过的边。该代码示例展示了如何定义 Edge 结构体、使用 unordered_set 记录访问状态、以及使用迭代器遍历容器并删除元素。希望本文能够帮助您更好地理解和使用 C++ 语言中的相关数据结构和算法。

C++ 代码示例:从容器中删除访问过的边

原文地址: https://www.cveoy.top/t/topic/fAJl 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录