'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>>

也就是说,地图的 keystring 类型,但您尝试通过 adj_list.at(i) 访问此地图的元素,其中 i(键)是 int 类型而不是 string.

类型

没有从 intstring 的隐式转换。这就是你的编译器抱怨的原因。

遍历映射的替代实现

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;
}