Most efficient way of erasing/deleting multiple std::vector elements while retaining original order?

前端 未结 7 1433
隐瞒了意图╮
隐瞒了意图╮ 2020-12-23 17:37


i have a std::vector and a second container holding iterators or indexes (no keys, i want constant access to the element) to this vector for del

7条回答
  •  一生所求
    2020-12-23 18:35

    I've written a function, based on Benjamin Lindley answer https://stackoverflow.com/a/4115582/2835054.

    #include 
    #include 
    #include 
    
    template 
    void remove_multiple_elements_from_vector(std::vector &vector,
    std::vector &indexes)
    {
        // 1. indexType is any integer.
        // 2. elementType is any type.
        // 3. Indexes should be unique.
        // 4. The largest index inside indexes shouldn't be larger than
        //    the largetst index in the vector.
        // 5. Indexes should be sorted in ascending order
        //    (it is done inside function).
        std::sort(indexes.begin(), indexes.end());
        indexType currentIndexInIndexesVector = 0;
        indexType last = 0;
        for(indexType i=0; i= vector.size()) break;
    
           vector[last] = vector[i];   
        }
    
        vector.resize(last);
    }
    
    
    int main()
    {
        std::vector vector = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
        std::vector indexes = {0, 10, 5};
    
        for (auto &vectorElement : vector)
        {
            std::cout << vectorElement << " ";
        }    
        std::cout << "\n";
    
        remove_multiple_elements_from_vector(vector, indexes);
    
        for (auto &vectorElement : vector)
        {
            std::cout << vectorElement << " ";
        }
    }
    

提交回复
热议问题