c ++访问地图中数组的元素

art*_*hur 8 c++ arrays map

可能重复:
使用数组作为映射值:无法查看错误

假设我有以下数据结构:

std::map<size_t, double[2] > trace;
Run Code Online (Sandbox Code Playgroud)

如何使用operator []访问其元素?

基本上我想做的事情如下:

trace[0][0] = 10.0;
trace[0][1] = 11.0;
Run Code Online (Sandbox Code Playgroud)

在编译这些代码行时,我收到以下错误:

/usr/include/c++/4.6/bits/stl_map.h:453:11: error: conversion from ‘int’ to non-scalar type ‘std::map<long unsigned int, double [2]>::mapped_type {aka double [2]}’ requested
Run Code Online (Sandbox Code Playgroud)

评论?

Mik*_*our 5

映射的值类型必须是可默认构造的,使用表达式value_type()才能通过它访问它们[].出于一些神秘的原因,数组类型不是,如C++ 11 5.3.2/2中所规定的那样(我强调):

表达式T(),其中T 是非数组完整对象类型的简单类型说明符或类型名称说明符...创建指定类型的prvalue,它是值初始化的

在尝试对数组进行值初始化时,编译器会发出奇怪的错误; 以下给出了同样的错误:

typedef double array[2];
array();
Run Code Online (Sandbox Code Playgroud)

我建议使用一个类类型,而不是double[2]:std::array<double,2>,std::pair<double,double>struct含两个双打.这些类型是可复制的,不会在一塌糊涂时衰减成指针(失去编译时的大小知识),并且通常比内置数组类型更容易处理.

如果您遇到了一个没有提供的旧库std::array,那么您可以使用非常相似的Boost.Array,或者编写自己的简单类模板来包装数组.