优化地图数据结构的地图

时间:2016-11-30 13:29:42

标签: c++ optimization stdmap

我想为每个x,y坐标存储一个2D点的矢量,以用作具有光线跟踪器某个方面的预先计算值的查找表。

为此,我创建了以下类型的数据结构:

std::map<float, std::map<float, std::vector<vec2>>> apertureMap;

为了了解数据结构的复杂性,地图和向量将分别包含32个条目。

我可以通过以下方式找到x,y坐标的下限值:

// find lowest bound x value
std::map<float, std::map<float, std::vector<vec2>>>::iterator it;
it = apertureMap.lower_bound(someInputValueX);
float value1 = it->first;

// find lowest bound y value
std::map<float, std::vector<vec2>>::iterator it2;
std::map<float, std::vector<vec2>> internal_map = it->second;
it2 = internal_map.lower_bound(someInputValueY);
float value2 = it2->first;

vec2 vertex = {it2->second[randomNumber].x, it2->second[randomNumber].y};

这一切都按预期工作,但速度惊人。我需要每个光线只调用这两个值,这意味着对于下一个光线,它会破坏并再次创建它。

有关如何加快此过程的任何建议吗?我想为初学者使用无序地图,但我需要找到非精确的密钥,我认为我只能使用较低的密钥/上限?如果有更快的方法,我也不依赖于这个特定的数据结构。

1 个答案:

答案 0 :(得分:3)

这一行:

var schema = {
"items": {
"address": "Zaharova Street 30",
"price": 200,
"square": 20,
"features": [
"Good Shopping Facilities","Metro","Recreation area nearby","Friendly and calm neighboors"
],
"active": true
}
};
var data1 = [true, false];
var data2 = [true, 123];
tests["Valid Data1"] = tv4.validate(data1, schema);
tests["Valid Data2"] = tv4.validate(data2, schema);
console.log("Validation failed: ", tv4.error);

它制作内部地图的完整副本。要么更改该行以使std::map<float, std::vector<vec2>> internal_map = it->second; 成为对internal_map的引用,要么完全删除该行并更改以下行以直接使用it->second