我真的不明白:
我正在读取点,每个点都包含 3 个浮点值,来自二进制文件。将此点保存在 unordered_map 中
因此我尝试从这 3 个浮点值中创建一个键:
第一个意图:只需使用确切的位作为密钥:
unordered_map<string, vector<float>> points;
string vecToKey( float* a ) {
char bytes[12];
memcpy(bytes, a, 12);
return string(bytes);
}
关键是我绝对想以这种方式消除相同的点,但是
在一个读取大约 21374 点的示例项目中,地图结果大小 = 10640 点
使用以下方法作为密钥创建导致 10687 点的正确结果
string vec3ToKey( float a[3] ) {
float a1[3];
a1[0] = a[0];
a1[1] = a[1];
a1[2] = a[2];
stringstream ss;
boost::archive::text_oarchive oa(ss);
oa << a1;
return ss.str();
}
问题是速度。第二种方法需要大约 16 秒,第一种方法只需 1-2 秒……我无法解释自己为什么会有差异……
我欣赏每一个想法:)