微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从二维向量中删除重复向量

如何解决从二维向量中删除重复向量

我已经编码它以从二维向量中删除相似的向量,这可以用于二维向量内的任意数量的向量,但例如我只采用了 3 个向量。

此处,{1,2,3,4}{3,1,4} 相似,因此我必须删除 {3,4}

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main()
{
    vector<vector<int> > v = { { 1,4 },{ 5,6,7,8 },{ 3,4 } };
    vector<int> r,c;

    // sorting elements
    for (auto row = v.begin(); row != v.end(); row++) {
        sort(row->begin(),row->end());
    }

    // Deleting Duplicates
    for (auto row = v.begin(); row != v.end() - 1; row++) {
        r.clear();
        c.clear();
        cout << endl
             << endl;
        for (auto col = row->begin(); col != row->end(); coL++) {
            r.push_back(*col);
        }

        for (auto cr = row + 1; cr != v.end(); cr++) {
            for (auto cc = cr->begin(); cc != cr->end(); cc++) {
                c.push_back(*cc);
            }

            if (r == c)
                v.erase(cr->begin(),cr->end());
            c.clear();
        }
        cout << endl;
    }

    // Printing
    for (auto row = v.begin(); row != v.end(); row++) {
        for (auto col = row->begin(); col != row->end(); coL++) {
            cout << *col << " ";
        }
    }
}
error: no matching function for call to ‘std::vector >::erase(std::vector::iterator,std::vector::iterator)'

解决方法

您可以轻松地对二维向量的元素进行排序,然后将它们一一比较。 这里,一个函数比较两个一维向量并返回结果。

注意:当你的二维向量的一个元素被删除时,下一个元素会替换它,所以你不应该增加目标索引(我的代码中的索引 k)。仅当这两个元素不相等时才增加索引。

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

bool twoVectorsAreEqual(vector<int> first_vec,vector<int> second_vec) {

    sort(first_vec.begin(),first_vec.end());
    sort(second_vec.begin(),second_vec.end());
    return (first_vec == second_vec);
}

int main(){

    vector<vector<int>> double_vec /* = some velue*/;

    for (int i = 0; i < double_vec.size() - 1; i++) {
        for (int k = i + 1; k < double_vec.size();) {

            if (twoVectorsAreEqual(double_vec[i],double_vec[k])) {
                double_vec.erase(double_vec.begin() + k);                
            else
                k++;                
        }
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。