我正在尝试使用类(Sample)添加对象,对我的向量进行排序,之后删除向量中的重复条目。
我的代码(这只是我程序中代码的一部分)
vector<Sample> sampleVector;
sort(sampleVector.begin(), sampleVector.end());
sampleVector.erase(std::unique(sampleVector.begin(),sampleVector.end(),sampleVector.end()));
但是当我尝试运行我的程序时,它会显示此错误。
Type 'std::__1::__wrap_iter<Sample *>' does not provide a call operator
我意识到错误最有可能是由这条线引起的
sampleVector.erase(std::unique(sampleVector.begin(),sampleVector.end(),sampleVector.end()));
我应该怎样做才能使其能够删除向量中的重复条目? 提前谢谢
我尝试了另一件事,但它没有用。
bool myfunction (Sample *i,Sample *j) {
return (i==j);
}
std::vector<Sample>::iterator it;
vector<Sample> sampleVector;
it = std::unique(sampleVector.begin(), sampleVector.end(),myfunction);
for (it=sampleVector.begin(); it!=sampleVector.end(); ++it) {
std::cout << *it << " "; <-- error must change it to &*it
}
答案 0 :(得分:2)
错位的括号。校正:
sampleVector.erase( std::unique(sampleVector.begin(),sampleVector.end()),
sampleVector.end() );
我不会责怪你被抓出来。 C ++编译器错误是令人发指的。
答案 1 :(得分:0)
我认为您可以尝试以下代码
bool myfunction (int i, int j) {
return (i==j);
}
std::unique (myvector.begin(), myvector.end(), myfunction);
std::cout << "myvector contains:";
for (it=myvector.begin(); it!=myvector.end(); ++it){
std::cout << ' ' << *it;
}
std::cout << '\n';
希望它会有所帮助!
答案 2 :(得分:0)
另一个值得考虑的可能性是您可以将已排序的元素放入std::set
。这将保留排序的顺序并确保项目的唯一性。