Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 需要时间高效的数据结构来存储计算值,使用不同映射中具有相交键类型但值类型相同的值_C++_Data Structures - Fatal编程技术网

C++ 需要时间高效的数据结构来存储计算值,使用不同映射中具有相交键类型但值类型相同的值

C++ 需要时间高效的数据结构来存储计算值,使用不同映射中具有相交键类型但值类型相同的值,c++,data-structures,C++,Data Structures,我有个问题 class A { }; class B { }; class D { int d1; int d2; }; std::unordered_map<A, D> m1; std::unordered_map<B, D> m2; std::unordered_map<std::pair<A, B>, D> m3; 我有4节课 需要维护3张地图 class A { }; class B { }; class D {

我有个问题

class A
{
};

class B
{
};

class D
{
    int d1;
    int d2;
};

std::unordered_map<A, D> m1;
std::unordered_map<B, D> m2;
std::unordered_map<std::pair<A, B>, D> m3;
我有4节课
需要维护3张地图

class A
{
};

class B
{
};

class D
{
    int d1;
    int d2;
};

std::unordered_map<A, D> m1;
std::unordered_map<B, D> m2;
std::unordered_map<std::pair<A, B>, D> m3;
注:这些值可能不存在,在这种情况下,它们将被跳过,例如:对于一对(a,b),m1[a]不存在,而将使用
min(m2[b],m3[std::pair(a,b)]

简单的解决方案是
1.查找

m1[a],m2[b],m3[对(a,b)]

三次查找
2.在d1和d2上执行最小值
3.获取d

class A
{
};

class B
{
};

class D
{
    int d1;
    int d2;
};

std::unordered_map<A, D> m1;
std::unordered_map<B, D> m2;
std::unordered_map<std::pair<A, B>, D> m3;
我不能为每个a保存每个b,因为a和b的可能键的数量很大

问题
1.我需要将此信息存储在这样一种结构中,即对于一对ab,我可以在不到三次的查找中获得d,我需要将查找时间减少到最小,而空间可能会增加。
2.此外,更新该结构的时间可能比更新三个地图要长。
3.如果有人知道任何这样的数据结构,请提供名称或链接或一些解释。谢谢


关于

你为什么需要这些?这个解决方案应该解决什么问题?请花一些时间阅读和,然后思考如何改进您的问题。问题是,使用以下事实来节省时间:存在具有相交实体的不同键,对于包含所有实体的键,可以找到一个值,该值取决于对应于不同键的值。目标是在开始时构造所有这些值(增加空间)但是在以后检索时使用更少的时间。问题是节省时间——您是否实际测量了您将节省多少时间?我已经测量了执行上述简单解决方案所需的时间,但我不知道使用新结构可以节省多少时间,因为我不知道任何此类结构。我想要一个结构,它可以根据键类型中实体的数量和可能的键类型的数量来节省时间,这里实体的数量是2,可能的键类型的数量是3。为什么你认为进行3次查找不好?在无序映射中的查找是按O(1)摊销的,因此执行3次查找并不是那么糟糕,执行2次或1次而不是3次不会给您带来如此巨大的改进。TL;博士,我不知道是否有比你提到的更好的方法,但如果有,我不认为会更好。