获得给定向量的排列索引列表的最佳方法是什么?
What is the best way to get a permutation index list of a given vector
在我的应用程序中,我在给定的点列表上解决了几何问题。
0 x0 y0
1 x1 y1
...
解决方案文件应包含指定为其索引列表的点的特定排序。
1
0
...
解决问题后,我有一个以一定顺序的点对象的result = std::vector<Point>()
向量,以及作为original = std::vector<Point>()
向量的点的原始列表。两个向量自然都具有相同的大小。要生成输出文件,我将通过result
向量并搜索original
向量中的点的索引。这是非常效率的,因为它确实需要O(n^2)
时间。作为一个略有改进,我要做以下操作:
std::ofstream out(filename);
std::vector<int> indices(instance.size);
std::iota(indices.begin(), indices.end(), 0);
for(auto &point : instance.result.points)
{
for(std::size_t i=0; i<indices.size(); i++)
{
int id = indices[i];
if(point == instance.points[id])
{
out << id << std::endl;
indices.erase(indices.begin()+i);
break;
}
}
}
out.close();
这使我不能重新审视我之前已经找到的要点。可悲的是,对于100万点的实例,这个过程超过了我的时间限制,我不希望解决方案的导出时间比解决问题本身要多。有没有一种方法可以有效获取C 中某些向量的预先征用的索引?如果需要,该解决方案可以使用很多内存。
实现的易于实现,并且非常有效的解决方案是创建一个临时std::unordered_map<Point,size_t>
,其中键是original
内的点和值位置,然后在该地图中查找。有关如何使用您(或提供的库(数据类型作为std::unordered_map
中的键的详细信息
您可以扩展Point
结构以包含原始ID,除了位置。
相关文章:
- 从嵌套在std::映射中的std::列表中删除元素的最佳方式
- Qt - QVector 和模型视图 - 从列表视图获取自定义类的最佳方法是什么?
- 从列表/向量制作嵌套 for 循环的最佳方法是什么?
- 对列表列表中的元素进行分组的最佳方式
- 生成包含给定类型的 N 个参数的可变参数列表的最佳方法?
- 用于筛子的最佳数据结构是什么(即一些被划掉的数字列表)?
- 能够访问逐项列表的最佳结构
- 存储数据列表并自动分配给结构的最佳方法是什么
- 获得给定向量的排列索引列表的最佳方法是什么?
- 调用列表中子对象方法的最佳方法
- 从初始值设定项列表中填充boost::multi_array的最佳方法是什么
- 如何添加到链接列表中以获得最佳拟合管理或删除某些内容
- C 初始化列表std ::数组最佳性能
- 可视化是什么是使用C 将附加扫描仪(Twain设备)列表列出到计算机的最佳方法
- 将结构分为函数参数列表的最佳方法
- 存储动态创建对象的列表/向量的最佳方法是什么
- 将元组传递给函数并让它返回数字列表的最佳方法
- 多列表初始化的 C++ 最佳做法
- XE2 - Indy TCPServer:编写和读取列表视图的最佳方式是什么
- 用于存储对象列表的最佳标准类