我有一个“Faction”类的指针 vector ,以这样的方式存储:
vector<Faction *> factionptr_;
此时,我已经能够按字母顺序对我的 vector 进行排序,所以我想我可以在这里使用这段代码来删除任何出现在彼此旁边的重复项:
void Faction::deleteDuplicateFaction(vector<Faction *> &factionptr_){
for (int i = 0; i < factionptr_.size()-1; i++){
if (factionptr_[i]->getFactionname() == factionptr_[i + 1]->getFactionname()){
cout << "it's the same" << endl;
factionptr_.erase(factionptr(i));
}
但我在 .erase() 处遇到错误,我不明白:
IntelliSense: no instance of overloaded function "std::vector<_Ty, _Alloc>::erase [with _Ty=Faction *, _Alloc=std::allocator<Faction *>]" matches the argument list
argument types are: (Faction *)
object type is: std::vector<Faction *, std::allocator<Faction *>>
现在我知道我可以为此使用迭代器,但我还不太熟悉它们。不过,我绝对不反对涉及迭代器的解决方案。
也许还有别的办法?
factionptr 是这样的:
Faction * Faction::factionptr(int k) const{
if ((k < 0) or(k > numberOfFactions())) // elementary error checking
return NULL;
return factionptr_[k]; // returns a pointer to the k-th daughter
最佳答案
不鼓励重新发明轮子。这是 std::unique
使用一个简单的自定义谓词,后跟一个 erase
。
auto pred = [](Faction* a, Faction* b) {
return a->getFactionname() == b->getFactionname();
};
factionptr_.erase(std::unique(factionptr_.begin(), factionptr_.end(), pred),
factionptr_.end());
关于c++ - 试图删除 vector 指针重复项。为什么我不能使用 .erase()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30553610/