数组作为映射键

问题描述 投票:0回答:2

我正在尝试使用数组作为映射键。我可以使用它,但是一旦尝试将其集成到类中,就会收到以下编译器错误:

在“ T&Matrix :: operator [](std :: array)[带有T = double的实例中]”:35:12:从这里需要20:24:错误:对“(std :: map,double,std :: less>,std :: allocator,double>>>)(const std :: array&)”的调用不匹配返回矩阵(索引);

这是我的代码的样子:

#include <map>

template <typename T>
struct Matrix{
    std::map<std::array<int,2>,T> matrix;
    int rows;
    int columns;

    Matrix()
    : rows(0),
      columns(0)
    {  }

    Matrix(int rows,int columns)
    :  rows(rows),
    columns(columns)
    { }

    T& operator[](const std::array<int,2> index){
    return matrix(index);
}

    T& operator[](const std::array<int,2>& index) const{
    return matrix(index);
}

};

int main(int argc, char *argv[])
{
    Matrix<double> M(10,10);
    double a = 10;
    M[{10,11}] = a;


    return 0;
}
c++ arrays c++11 maps
2个回答
1
投票
您的代码中有一些问题:

    缺少array的包含
  • 缺少比较运算符
  • 丢失呼叫操作员的用法
  • #include <array> // Added include #include <map> template <typename T> struct Matrix{ std::map<std::array<int,2>,T> matrix; int rows; int columns; Matrix() : rows(0), columns(0) { } Matrix(int rows,int columns) : rows(rows), columns(columns) { } T& operator[](const std::array<int,2> &index){ return matrix[index]; // replace call operator } const T& operator[](const std::array<int,2>& index) const{ //return const reference return matrix.at(index); // replace call operator } }; // Probably not necessary // Add compare function // Default is std::less, uses operator< bool operator<(const std::array<int, 2> &lhs, const std::array<int,2> &rhs) { return lhs.at(0) < rhs.at(0) ? true : lhs.at(0) > rhs.at(0) ? false : lhs.at(0) < rhs.at(0); } int main() { Matrix<double> M(10,10); double a = 10; M[{10,11}] = a; return 0; }

  • 0
    投票
    问题在这里:

    return matrix(index);

    应该是:

    return matrix[index];

    注意[]运算符。

    您也应该#include <array>


    P.S。std::arrayis provided的比较运算符。
    © www.soinside.com 2019 - 2024. All rights reserved.