c++ - 为什么我不能在这个向量上使用 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 引用的对象?
解决方案
我想我找到了问题所在。std::set 不能修改,至少不能直接修改。为了使其元素可修改,我做了这样的事情:
mutable std::vector<std::pair<Vertex, int>> neighbors;
基本上使我想在 set mutable中修改的元素的属性。
推荐阅读
- python - 禁用一个按钮直到另一个按钮被按下?
- angular - 可以将 mat-checkbox 用作 mat-label 吗?
- linux - Debian Buster:'E:无法找到软件包'
- python - 从 pandas 数据框按列创建一个平面列表
- python - Python 模拟的副作用是返回一个模拟对象而不是值
- php - 如何将文本文件中的文本向下移动一行,附加到顶部,然后在 PHP 中删除底线?
- python - 如何从 n 个不同的二维数组中取数组值的平均值?Python
- three.js - 如何减少从视图中隐藏的几何图形的不透明度?
- javascript - 在 vue 中使用环境变量
- ansible - 如果删除需要从其他资源中删除,如何管理 ansible 创建的资源?