【发布时间】:2011-11-29 09:20:00
【问题描述】:
我有一个包含整数值的向量 (loops)。一些内部向量是重复的,但它们的元素顺序不同。现在,我想得到一个向量的向量,而没有任何重复的内部向量。
这是我的 vec 的示例;
循环 = ((9 18 26 11 9), (9 11 26 18 9),(9 18 25 16 9),(11 45 26 11),(11 26 45 11),(16 49 25 16) ,(16 25 49 16),(18 9 11 26 18),(18 9 16 25 18),(25 16 49 25),(26 11 45 26))
识别任何内部向量是否是另一个内部向量的副本;我开发了一个函数IsDuplicate。这告诉我,(9 18 26 11 9) and (9 11 26 18 9) 是重复的,然后我可以删除第二个或所有其他重复。
为了删除我的向量向量中的重复向量,我实现了以下代码。
Vector<vector<int> > loops;
Vector<vector<int> > ::iterator no1, no2;
Int setno1, setno2;
for (no1=loops.begin(), setno1=0; no1!=loops.end(); no1++, setno1++){
set1 = *no1;
for (no2=loops.begin()+setno1, setno2=setno1; no2!=loops.end(); setno2++){
set2 = *no2;
if (set2.IsDuplicate(set1)) loops.erase(loops.begin()+setno2);
else no2++;
}
}
花了很长时间,我认为我的程序正在崩溃。所以,请帮我纠正这个问题。
另外,我试过这个。这有效,但我得到了错误的答案。请帮忙。
01 int first=0; bool duplicates=false;
02 do {
03 set1 = loops[first];
04 for (no2=loops.begin()+1, setno2=1; no2!=loops.end(); setno2++){
05 set2 = *no2;
06 if (set2.IsPartOf(set1)){
07 loops.erase(loops.begin()+setno2);
08 duplicates = true;
09 }
10 else no2++;
11 }
12 first++;
13 } while(!duplicates);
【问题讨论】:
-
“崩溃”怎么办?未捕获的异常?可能是分段错误?
-
为什么不制作集合或多重集合的向量?那么识别重复项会容易得多。甚至是一组集合。
-
@KerrekSB 集合 (1,1,2) 和 (1,2,2) 是否相等?