簡體   English   中英

為什么我無法在此向量上使用 push_back?

[英]Why am I unable to use push_back on this vector?

我正在嘗試創建一個圖表。 我將邊建模為std::pair連接的頂點和連接這些頂點的邊的權重。 我通過另一個圖 class 插入這條邊,該圖將所有這些頂點保存為std::set

我打算這樣做的方式如下:

這是頂點 class:

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:

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
} 

->運算符是返回迭代器指向的 object,還是返回對它的 const 引用之類的東西?

我想我發現了問題。 std::set 不能修改,至少不能直接修改。 為了使其元素可修改,我做了這樣的事情:

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

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

感謝這個答案: https://stackoverflow.com/a/7340470/14635766

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM