使用 unordered_map 值初始化指向向量的指针时出错
Error initializing pointer to vector using unordered_map value
我有一个名为 street_map 的 class,它包含一个带有 int 键和 vector<edge>
类型值的映射。在其中一种方法中,我试图初始化指向 vector<edge>
值的指针以获取其内容。
class street_map {
public:
explicit street_map (const std::string &filename);
bool geocode(const std::string &address, int &u, int &v, float &pos) const;
bool route3(int source, int target, float &distance) const {
auto it = adjacencyList.find(source);
vector<edge>* v = &(it->second);
return true;
}
private:
unordered_map<side , vector<segment>> map;
unordered_map<int, vector<edge>> adjacencyList;
};
第vector<edge>* v = &(it->second);
行给出了错误:
Cannot initialize a variable of type 'vector<edge> *' with an rvalue of type 'const std::__1::vector<edge, std::__1::allocator<edge> > *'
这是边class:
class edge {
int node;
string street;
float length;
int startingNode;
public:
edge(int startingNode, int node, string street, float length) {
startingNode = startingNode;
node = node;
street = street;
length = length;
}
};
我想知道这是不是因为 const 关键字,如果是因为 const 关键字如何解决这个问题(我应该保留 const 关键字,但我想如果有的话我可以去掉它没有其他解决方案)。
您有四个选择:
1) 使指向向量的指针为const
您将无法修改矢量。
bool route3(int source, int target, float &distance) const {
auto it = adjacencyList.find(source);
const vector<edge>* v = &(it->second);
return true;
}
2) 使您的 adjacencyList 可变
mutable 意味着可以从 const 函数作为非常量访问 - 如果您不注意您的访问设计,这可能会有风险!
private:
unordered_map<side , vector<segment>> map;
mutable unordered_map<int, vector<edge>> adjacencyList;
3) 复制向量
这可能会带来更大的开销,并且对矢量所做的更改不会存储在您的地图中。
vector<edge> v = (it->second);
4) 使函数成为非常量
请注意,无法在 street_map
为 const 的上下文中调用此函数!
bool route3(int source, int target, float &distance) {
auto it = adjacencyList.find(source);
vector<edge>* v = &(it->second);
return true;
}
我有一个名为 street_map 的 class,它包含一个带有 int 键和 vector<edge>
类型值的映射。在其中一种方法中,我试图初始化指向 vector<edge>
值的指针以获取其内容。
class street_map {
public:
explicit street_map (const std::string &filename);
bool geocode(const std::string &address, int &u, int &v, float &pos) const;
bool route3(int source, int target, float &distance) const {
auto it = adjacencyList.find(source);
vector<edge>* v = &(it->second);
return true;
}
private:
unordered_map<side , vector<segment>> map;
unordered_map<int, vector<edge>> adjacencyList;
};
第vector<edge>* v = &(it->second);
行给出了错误:
Cannot initialize a variable of type 'vector<edge> *' with an rvalue of type 'const std::__1::vector<edge, std::__1::allocator<edge> > *'
这是边class:
class edge {
int node;
string street;
float length;
int startingNode;
public:
edge(int startingNode, int node, string street, float length) {
startingNode = startingNode;
node = node;
street = street;
length = length;
}
};
我想知道这是不是因为 const 关键字,如果是因为 const 关键字如何解决这个问题(我应该保留 const 关键字,但我想如果有的话我可以去掉它没有其他解决方案)。
您有四个选择:
1) 使指向向量的指针为const
您将无法修改矢量。
bool route3(int source, int target, float &distance) const {
auto it = adjacencyList.find(source);
const vector<edge>* v = &(it->second);
return true;
}
2) 使您的 adjacencyList 可变
mutable 意味着可以从 const 函数作为非常量访问 - 如果您不注意您的访问设计,这可能会有风险!
private:
unordered_map<side , vector<segment>> map;
mutable unordered_map<int, vector<edge>> adjacencyList;
3) 复制向量
这可能会带来更大的开销,并且对矢量所做的更改不会存储在您的地图中。
vector<edge> v = (it->second);
4) 使函数成为非常量
请注意,无法在 street_map
为 const 的上下文中调用此函数!
bool route3(int source, int target, float &distance) {
auto it = adjacencyList.find(source);
vector<edge>* v = &(it->second);
return true;
}