C++ 静态初始化 map<float, float[3]>

6

我有一个名为myMap的地图,我正在尝试进行静态初始化(必须以这种方式完成)。

我正在执行以下操作:

myMap = 
{
    {415, {1, 52356, 2}}, 
    {256, {356, 23, 6}},
    //...etc
};

然而我得到了以下错误:“数组初始化器必须是初始化列表。”
我的语法有什么问题?

请查看此链接。https://dev59.com/NHI95IYBdhLWcg3wvwsQ - Abhishek Bansal
我已经检查过了,我认为我的问题不同,因为我尝试静态初始化一个类型为map<float,float>的映射,而不是map<float,float[3]>,这样做完全没有问题。只有当值是数组时,我才会遇到这个问题。 - user1855952
请检查此链接:https://dev59.com/8nVC5IYBdhLWcg3w9F89 - vinod
问题只在我尝试使用数组作为值时才会出现。然而,我上面所做的基本上就是你发布链接中所说的要做的事情。 - user1855952
1
这个链接应该很有用。http://www.cplusplus.com/forum/beginner/95335/ - Abhishek Bansal
现在它可以工作了,谢谢。 - user1855952
2个回答

4

您应该使用array<float, 3>而不是“普通”的数组:

#include <map>
#include <array>
#include <iostream>

int main()
{
    std::map<float, std::array<float, 3>> myMap
    {
        {415, std::array<float, 3>{1, 52356, 2}},
        {256, std::array<float, 3>{356, 23, 6}}
        //...etc
    };

    /* OR 

    std::map<float, std::array<float, 3>> myMap
    {
        {415, {{1, 52356, 2}}},
        {256, {{356, 23, 6}}}
        //...etc
    };

    */

    std::cout << myMap[415][0] << " " << myMap[256][1] << " " << std::endl;

    return 0;
}

0

我猜测你正在尝试使用Visual Studio 2012或更早版本。对于std::map的初始化列表的支持直到Visual Studio 2013才被添加。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接