访问 std::vector<std::map<int, unsigned char>> 网格的元素给出错误 "Expression must have a class type"
Accessing elements of std::vector<std::map<int, unsigned char>>grid gives error "Expression must have a class type"
我搜索了很远,但找不到答案。为什么我不能访问元素?它给了我错误:“表达式必须有一个 class 类型”。我不知道这是什么意思。有人可以给我一个解决方案吗?
#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
}
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
你的意思好像是
std::cout << grid.at(0).at(1);
而不是
std::cout << grid.at(0).at(0).second;
与
相同
std::cout << grid.at( 0 ).begin()->second;
前提是具有键 1
的元素是所选地图中的第一个元素。
也就是说在成员函数的第二次调用中at
你必须在映射中指定一个键。在这种情况下,该函数将 return 在您的情况下具有标量类型 unsigned char
.
的相应值
成员函数at
声明为
T& at(const key_type& x);
const T& at(const key_type& x) const;
对于给定的键,它 return 是相应的值。
在索引 0
处的地图中,向量初始化为
{std::make_pair(1,'-'), std::make_pair(2,'-'), std::make_pair(3,'-')
键是 1
、2
和 3
。
所以你可以使用表达式
grid.at(0).at(1)
grid.at(0).at(2)
grid.at(0).at(3)
我搜索了很远,但找不到答案。为什么我不能访问元素?它给了我错误:“表达式必须有一个 class 类型”。我不知道这是什么意思。有人可以给我一个解决方案吗?
#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
}
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
你的意思好像是
std::cout << grid.at(0).at(1);
而不是
std::cout << grid.at(0).at(0).second;
与
相同std::cout << grid.at( 0 ).begin()->second;
前提是具有键 1
的元素是所选地图中的第一个元素。
也就是说在成员函数的第二次调用中at
你必须在映射中指定一个键。在这种情况下,该函数将 return 在您的情况下具有标量类型 unsigned char
.
成员函数at
声明为
T& at(const key_type& x);
const T& at(const key_type& x) const;
对于给定的键,它 return 是相应的值。
在索引 0
处的地图中,向量初始化为
{std::make_pair(1,'-'), std::make_pair(2,'-'), std::make_pair(3,'-')
键是 1
、2
和 3
。
所以你可以使用表达式
grid.at(0).at(1)
grid.at(0).at(2)
grid.at(0).at(3)