我正在尝试使用 C++ 标准库算法unique
(带有BinaryPredicate
)。
我创建了一个向量对;每对就像“(第一个= 4个双精度的向量,第二个=一个整数)”。第二个元素作为索引,所以在使用 `unique 之后,我仍然可以告诉原始索引。
在下面的示例中,我创建了如下内容:
10 20 30 40, 1
10 20 30 40, 2
10 20 30 40, 3
10 20 30 40, 4
10 20 30 40, 5
10 20 30 40, 6
现在我想使用 unique 函数只比较每对的第一个元素。我使用了自定义二进制预测器uniquepred
。确实,它有效,但使用unique
.
预期结果
Size before=6
equal!
equal!
equal!
equal!
equal!
Size after=1
实际结果
Size before=6
equal!
equal!
equal!
equal!
equal!
Size after=6
最小工作示例如下。请帮我调试一下。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
typedef std::vector<double> V1db;
typedef std::pair<V1db, int > Pairs;
typedef std::vector<Pairs> Vpairs;
bool uniquepred( const Pairs& l, const Pairs& r) {
if (l.first==r.first)
cout<<"equal!"<<endl;
return l.first == r.first;
}
int main()
{
Vpairs ak;
V1db u2(4);
u2[0]=10;u2[1]=20;u2[2]=30;u2[3]=40;
Pairs m2;
m2.first = u2;
m2.second= 1;
ak.push_back(m2);
m2.second= 2;
ak.push_back(m2);
m2.second= 3;
ak.push_back(m2);
m2.second= 4;
ak.push_back(m2);
m2.second= 5;
ak.push_back(m2);
m2.second= 6;
ak.push_back(m2);
cout<<"Size before="<<ak.size()<<endl;
unique(ak.begin(), ak.end(), uniquepred);
cout<<"Size after="<<ak.size()<<endl;
return 0;
}