如何改进这些嵌套for循环

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:intGraphics*,你打电话给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:intvector<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.