如何访问存储map的二维vector?编译报错无first/second成员求助
解决嵌套vector中map元素的访问问题
嘿,这个问题我门儿清!编译器报错“no member having first and second”的原因很直白:你代码里的vectors[i][j]是一个完整的map<int, string>对象,而不是单个的键值对——只有map里的pair类型元素才有first(键)和second(值)成员,直接对着整个map用这俩成员当然会报错啦。
给你两种实用的解决方式,按需选就行:
1. 遍历map里的所有键值对
如果要把每个map里的元素都输出,得在原有循环基础上再加一层,遍历map内部的键值对。推荐用C++11及以上支持的范围for循环,代码简洁又直观:
#include <iostream> #include <map> #include <vector> int main() { map<int,string> my_map; vector<map<int,string> > v_temp; vector< vector<map<int,string> > > vectors; for (int i = 0; i < 2; i++) { for (int j = 0; j < 2; j++) { my_map.insert(make_pair(1,"sea")); my_map.insert(make_pair(2,"ocean")); v_temp.push_back(my_map); my_map.clear(); // 新增:每次push后清空map,避免重复插入相同键(map会自动忽略,但这样更规范) } vectors.push_back(v_temp); v_temp.clear(); } // 修正后的遍历逻辑 for(size_t i = 0; i < vectors.size(); i++) { for(size_t j = 0; j < vectors[i].size(); j++) { // 遍历当前map中的每个键值对 for (const auto& kv_pair : vectors[i][j]) { std::cout << "vectors[" << i << "][" << j << "][" << kv_pair.first << "] = " << kv_pair.second << "\n"; } } } return 0; }
这里的kv_pair就是map里的单个键值对(pair<const int, string>类型),它才拥有first和second成员,分别对应键和值。
2. 通过指定键直接访问值
如果你已经明确要访问的键(比如键1或键2),可以直接用map[key]的方式获取对应的值,比如:
// 访问vectors[0][0]中键为1的值 std::cout << vectors[0][0][1] << "\n"; // 输出 "sea" // 访问vectors[1][1]中键为2的值 std::cout << vectors[1][1][2] << "\n"; // 输出 "ocean"
小提醒:如果用map[key]访问一个不存在的键,map会自动插入这个键,对应的值为类型默认值(这里就是空字符串)。要是不想出现这种情况,可以先用find()方法检查键是否存在:
auto it = vectors[i][j].find(3); if (it != vectors[i][j].end()) { std::cout << it->second << "\n"; } else { std::cout << "键3不存在\n"; }
内容的提问来源于stack exchange,提问作者Ocean11
相关产品推荐
相关产品推荐

