'no known conversion for argument 1 from ‘int’ to ‘const key_type&’ error' 执行代码时
'no known conversion for argument 1 from ‘int’ to ‘const key_type&’ error' when executing code
我正在尝试用 C++ 做一个与图形相关的作业。目前我在执行代码时遇到此错误。我一直在寻找这背后的原因,但无济于事。任何帮助将不胜感激。
我的代码片段是:
#include <unordered_set>
#include <iostream>
using namespace std;
map<string,string> all_vertices;
map<string, map<string, T>> adj_list;
template <typename T>
size_t Graph<T>::num_edges() {
int edge_num =0;
for (int i =0; i< adj_list.size();i++){
for (auto x : adj_list.at(i)){
edge_num+=1;
}
}
return edge_num;
}
我得到的错误是:
no known conversion for argument 1 from ‘int’ to ‘const key_type&’ {aka ‘const std::__cxx11::basic_string<char>&’}
546 | at(const key_type& __k) const
| ~~~~~~~~~~~~~~~~^~~
抱歉,如果真的很乱。我对此还是很陌生。任何帮助将不胜感激。
说明
您将变量 adj_list
声明为类型 map<string, map<string, T>>
。
也就是说,地图的 key 是 string
类型,但您尝试通过 adj_list.at(i)
访问此地图的元素,其中 i
(键)是 int
类型而不是 string
.
类型
没有从 int
到 string
的隐式转换。这就是你的编译器抱怨的原因。
遍历映射的替代实现
template <typename T>
size_t Graph<T>::num_edges() {
int edge_num = 0;
for(auto& node : adj_list) {
for(auto& edge : node.second) {
edge_num++;
}
}
return edge_num;
}
我正在尝试用 C++ 做一个与图形相关的作业。目前我在执行代码时遇到此错误。我一直在寻找这背后的原因,但无济于事。任何帮助将不胜感激。 我的代码片段是:
#include <unordered_set>
#include <iostream>
using namespace std;
map<string,string> all_vertices;
map<string, map<string, T>> adj_list;
template <typename T>
size_t Graph<T>::num_edges() {
int edge_num =0;
for (int i =0; i< adj_list.size();i++){
for (auto x : adj_list.at(i)){
edge_num+=1;
}
}
return edge_num;
}
我得到的错误是:
no known conversion for argument 1 from ‘int’ to ‘const key_type&’ {aka ‘const std::__cxx11::basic_string<char>&’}
546 | at(const key_type& __k) const
| ~~~~~~~~~~~~~~~~^~~
抱歉,如果真的很乱。我对此还是很陌生。任何帮助将不胜感激。
说明
您将变量 adj_list
声明为类型 map<string, map<string, T>>
。
也就是说,地图的 key 是 string
类型,但您尝试通过 adj_list.at(i)
访问此地图的元素,其中 i
(键)是 int
类型而不是 string
.
没有从 int
到 string
的隐式转换。这就是你的编译器抱怨的原因。
遍历映射的替代实现
template <typename T>
size_t Graph<T>::num_edges() {
int edge_num = 0;
for(auto& node : adj_list) {
for(auto& edge : node.second) {
edge_num++;
}
}
return edge_num;
}