Nic*_*ick 17 c++ sorting performance loops
我有以下代码:
// vector of elements
vector<Graphic> graphics;
// vector of indexes of the selected graphic elements
vector<int> selected_indexes;
// vector according to which the graphic elements have to be "sorted" and parsed
vector<short> order;
for (auto o : order)
{
for (auto i : selected_indexes)
{
const auto& g = graphics[i];
if (g.position() == o)
{
// parse g
}
}
}
Run Code Online (Sandbox Code Playgroud)
我有一个自定义元素的向量以及已经选择要解析的元素的索引,但是这些元素必须被解析的顺序取决于它们position()根据第三个向量的值.
有没有办法改进这些嵌套循环,避免迭代迭代将被跳过的元素,因为它们的位置不等于当前的顺序?
Che*_*Alf 13
假设只有一个Graphic具有给定的对象position():
建立一个unordered_map:int→ Graphics*,你打电话给eg gp,这样gp[i]->position()= i.
构建地图是线性时间,对每个索引使用它是大致恒定的时间.
for( auto o : order )
{
auto const& g = *gp[o];
// parse g
}
Run Code Online (Sandbox Code Playgroud)
如果可以有多个Graphics具有给定位置的对象,请构建一个unordered_map:int→ vector<Graphic*>,然后使用类似的用法代码
for( auto o : order )
{
for( auto const p : gp[o] )
{
auto const& g = *p;
// parse g
}
}
Run Code Online (Sandbox Code Playgroud)
或者,对于最后一种情况,您可以使用unordered_multimap.
| 归档时间: |
|
| 查看次数: |
1926 次 |
| 最近记录: |