C++ - 如何将静态字典制作成查找矩阵

标签 c++ c++11 matrix

我正在尝试编写一个 C++ 类,允许我通过字符串查找访问某些矩阵元素。我想创建一个可以执行此操作的“静态”类,例如:

#include <unordered_map>
namespace Mine {
static double AA[3][4] = {
    {5.04964676394959,-0.693207030363152,0.0422140829479668,-0.000968959310672217},
    {2.6044054979329,0.288475262243944,-0.0208805589126506,0.000380899394040856},
    {-4.32707864788065,1.07090008760872,-0.0777874445746693,0.00165150952598117}
};
static unordered_map<std::string, double[3][4]> Mine::parameter_store = { {"AA", AA}};

我的想法是我会有多个矩阵,并且可以根据键查找它们。但是,这似乎完全失败并出现以下错误:

error: object expression of non-scalar type 'double [3][4]' cannot be used in a pseudo-destructor expression

是否可以在 C++ 中以这种方式构建查找表?

最佳答案

#include <unordered_map>
#include <vector>

namespace Mine{

template<class T>
using Matrix = std::vector<std::vector<T>>;

Matrix<double> AA = {
    {5.04964676394959,-0.693207030363152,0.0422140829479668,-0.000968959310672217},
    {2.6044054979329,0.288475262243944,-0.0208805589126506,0.000380899394040856},
    {-4.32707864788065,1.07090008760872,-0.0777874445746693,0.00165150952598117}
};

static std::unordered_map<std::string, Matrix<double>* > parameter_store = { {"AA", &AA}};
}


#include <iostream>
int main()
{
    std::cout << (*Mine::parameter_store["AA"])[0][0] << std::endl;
    std::cout << (*Mine::parameter_store["AA"])[0][1] << std::endl;
    std::cout << (*Mine::parameter_store["AA"])[1][2] << std::endl;
}

输出

5.04965
-0.693207
-0.0208806

Matrix<>此处使用的模板会导致每一行存储其长度,即使这是多余的。您可以通过使用 std::array 来避免这种情况(但是你被锁定在每个具有相同维度的矩阵中,因为这是类型信息的一部分)或者使用像 Boost 这样提供多维数组的库。不过,这是一个非常小的低效率问题,除非您知道自己需要这样做,否则最好不要担心这一点。

关于C++ - 如何将静态字典制作成查找矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28777903/

相关文章:

c++ - 在 C++ 中,(int *) 和 & 有什么区别?

c++ - 使用密集矩阵和稀疏矩阵

c - 在C编程中使用结构体的双指针将矩阵从文本文件读取到二维数组中

c++ - 为什么 g++ 使我的代码以不同于写入的顺序执行,我如何禁用此 "optimization"?

php - 相对于 x,y 位置的散列、多边形形状

c++ - 我能知道多态对象是否实现了任意抽象类吗?

c++ - 如何在 C++ 中将一个矩阵存储在另一个矩阵的一行中?

c++ - 无法理解编译器在复制构造函数上引发的错误消息

c++ - 在 vector 中查找大于 0(或者一般为 k)的最小元素的最佳方法是什么?

c++ - 我可以只让孙类在 C++ 中实现一个方法吗?