-1

我已经搜索了很远,但找不到答案。为什么我无法访问元素?它给了我错误:“表达式必须具有类类型”。我不知道这是什么意思。有人可以给我一个解决方案吗?

#include <iostream>
#include <vector>
#include <map>
#include <utility>
#include <algorithm>
int main()
{
    std::vector<std::map<int, unsigned char>>grid =
    {
        {std::make_pair(1,'-'), std::make_pair(2,'-'), std::make_pair(3,'-') },
        {std::make_pair(4,'-'), std::make_pair(5,'-'), std::make_pair(6,'-') },
        {std::make_pair(7,'-'), std::make_pair(8,'-'), std::make_pair(9,'-') }
    };
//This doesn't work
    std::cout << grid.at(0).at(0).second
    
}
4

2 回答 2

1

看来你的意思

 std::cout << grid.at(0).at(1);

代替

std::cout << grid.at(0).at(0).second;

它与

std::cout << grid.at( 0 ).begin()->second;

前提是带有键1的元素是所选地图中的第一个元素。

也就是说,在成员函数的第二次调用中,at您必须在映射中指定一个键。在这种情况下,该函数将返回在您的情况下具有标量类型的相应值unsigned char

成员函数at声明为

T& at(const key_type& x);
const T& at(const key_type& x) const;

对于给定的键,它返回相应的值。

0在初始化的向量中的索引处的地图内

{std::make_pair(1,'-'), std::make_pair(2,'-'), std::make_pair(3,'-')

键是123

所以你可以使用表达式

grid.at(0).at(1)
grid.at(0).at(2)
grid.at(0).at(3)
于 2020-12-03T17:27:06.920 回答
0

grid.at(0)会给你一个std::map<int, unsigned char>。从cppreference调用.at(key)地图将为您提供与该键对应的值。

所以如果你做了:

std::cout << grid.at(0).at(1);

(1, '-')您会在第一张地图的这对中看到“-” 。

相反,如果您想获得第一对,则应使用.begin()

std::cout << grid.at(0).begin()->second;

在行动中看到它:https ://ideone.com/YmLIvK

于 2020-12-03T17:22:01.360 回答