C++ 从向量的向量中删除向量的组合

C++ 从向量的向量中删除向量的组合,c++,vector,C++,Vector,我正在研究Leetcode中的4和问题。我试着用哈希表来做。我被困在移除向量向量中给定向量的组合上。例如,我有一个向量向量 v = [[1,4,0,5],[1,5,0,4],[4,5,0,1],[2,3,0,5],[2,5,0,3],[3,5,0,2],[2,4,1,3],[3,4,1,2]] 我想去掉[1,4,0,5],[2,3,0,5]和[2,4,1,3]的组合,这样在我的最终向量中,向量的组合不应该出现。应该是 v_final = [[1,4,0,5,],[2,3,0,5],[2,4,1

我正在研究Leetcode中的4和问题。我试着用哈希表来做。我被困在移除向量向量中给定向量的组合上。例如,我有一个向量向量

v = [[1,4,0,5],[1,5,0,4],[4,5,0,1],[2,3,0,5],[2,5,0,3],[3,5,0,2],[2,4,1,3],[3,4,1,2]]
我想去掉[1,4,0,5],[2,3,0,5]和[2,4,1,3]的组合,这样在我的最终向量中,向量的组合不应该出现。应该是

v_final = [[1,4,0,5,],[2,3,0,5],[2,4,1,3]]

我完全不知道该怎么做。有人能帮我从
v
获取
v\u final
吗?

我不确定我是否正确理解了这个问题。假设你有

v = { { 1,0} , {0,1} , {1,2}}
最后一个向量应该只有

v_final = { {1,0}, {1,2}}

因为您认为<代码> {1,0} 和<代码> {0,1}作为同一个元素(那些排列不是“组合”)。此外,我假设每个数字在内部向量中只出现一次

如果是这种情况,则选择了错误的数据结构。您的内部元素应该是
std::unordered\u set
s。一个集合只能包含每个元素一次

如果对外部容器也使用
std::unordered_set
,则转换将变得不必要,因为在此之后:

 std::unordered_set<std::unordered_set<int>> x;
 x.insert( { 1,2} );
 x.insert( { 2,1} );
std::无序_集x;
x、 插入({1,2});
x、 插入({2,1});
x
将只包含一个元素

如果出于其他原因需要向量的向量,我仍然会使用
无序集
,只需从向量中填充该集

作为已给出答案的补充

如果您想“手动”执行此操作,而不使用
std::unordered_set
,则可以使用来检测排列

这可能如下所示:

std::vector <std::vector<int>> v {{1, 2, 3}, {1, 3, 2}, {1, 2, 4}, {4, 2, 1}, {3, 4, 5}};

for(long long i = static_cast<long long>(v.size())-1; i >= 0; --i)
{
    for(std::size_t j = 0; j < static_cast<std::size_t>(i); ++j)
    {
        if(std::is_permutation(v[static_cast<std::size_t>(i)].begin(), v[static_cast<std::size_t>(i)].end(), v[j].begin(), v[j].end()))
        {
            v.erase(v.begin()+i);
            break;
        }
    }
}
向量v{{1,2,3},{1,3,2},{1,2,4},{4,2,1},{3,4,5}; for(long long i=static_cast(v.size())-1;i>=0;--i) { 对于(std::size_t j=0;j 如果在这些循环之后打印
v
,则每个重复/排列都将被删除

我做了测试,得到的输出是(如预期的):

1、2、3
1、2、4
3,4,5


编辑:注意
std::is_permutation
假设要比较的第二个范围包含的元素至少与要比较的第一个范围包含的元素相同


因此,如果
v
可以包含不同大小的向量,则在调用
std::is_permutation
之前应检查大小是否相等(因为如果大小不匹配,则要比较的内部向量不能相同)。

组合是什么意思?例如,您删除了[1,5,0,4]和[4,5,0,1]。为什么要删除这些“组合”?您需要基于散列的解决方案(带有额外内存)还是基于相等的解决方案(没有额外内存)?“组合”的意思是“排列”?您的意思是要删除重复项,只留下唯一的元素,其中排列被视为重复项?