1

我正在尝试使用类(示例)添加对象,对我的向量进行排序,然后删除我向量中的重复条目。

我的代码(这只是我程序中代码的一部分)

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
}
4

3 回答 3

2

括号错位。更正:

sampleVector.erase( std::unique(sampleVector.begin(),sampleVector.end()),
                    sampleVector.end() );

我不怪你被抓了。C++ 编译器错误令人发指。

于 2013-11-13T03:53:51.403 回答
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';

希望它会有所帮助!

于 2013-11-13T04:25:44.077 回答
0

另一种值得考虑的可能性是您可以将排序的元素放入std::set. 这将保留排序的顺序并确保项目的唯一性。

于 2013-11-13T04:50:53.507 回答