首页 > 解决方案 > 为什么我不能在这个向量上使用 push_back?

问题描述

我正在尝试创建一个图表。我将边建模为连接顶点的 astd::pair以及连接这些顶点的边的权重。我正在通过另一个将所有这些顶点保存为std::set.

我的方法如下:

这是顶点类:

class Vertex {
public:
    friend std::ostream &operator<<(std::ostream &os, const Vertex &v);
    Vertex(char c) : ID_(c) {}
    bool operator==(const Vertex &rhs) const {
        return (this->ID_ == rhs.ID_);
    }
    bool operator<(const Vertex &rhs) const {
        return (this->ID_ < rhs.ID_);
    }

    char ID_;
    std::vector<std::pair<Vertex, int>> neighbors;
};

这是包含顶点的图形类:

class Graph {
public:
    friend std::ostream &operator<<(std::ostream &os, const Graph &g);
    Graph(); 
    Graph(char c[]);
    void insertVertex(char c);
    void insertEdge(char ID1, char ID2, int weight);

protected:
    std::set<Vertex> vertices_;
};

这是我的边缘插入方法:

void Graph::insertEdge(char c1, char c2, int w) {
    auto it1 = vertices_.find(c1);
    auto it2 = vertices_.find(c2);
    auto p1 = std::make_pair(*it1, w);

    if(it1 != vertices_.end())
        it1->neighbors.push_back(p1);  // Fails here
} 

->运算符是返回迭代器指向的对象,还是返回类似 const 引用的对象?

标签: c++vectorstd-pair

解决方案


我想我找到了问题所在。std::set 不能修改,至少不能直接修改。为了使其元素可修改,我做了这样的事情:

mutable std::vector<std::pair<Vertex, int>> neighbors;

基本上使我想在 set mutable中修改的元素的属性。

感谢这个答案: https ://stackoverflow.com/a/7340470/14635766


推荐阅读