c++ - 试图删除 vector 指针重复项。为什么我不能使用 .erase()?

标签 c++ class pointers vector iterator

我有一个“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/

相关文章:

c++ - 如何将列的宽度调整为CListCtrl中最长字符串的宽度?

c++ - 没有 void_t 的 SFINAE(可能是模板特化问题)

java - 如何导入我下载的这些 Java 类?

r - 将所有列从逻辑转换为csv中的字符

pointers - 附加到接口(interface) slice

c++ - 使用std::make_signed_t时,概念解析为意外的功能模板

c++ - 如何为服务器编写主循环?

java - Tomcat 给出 org.springframework.beans.factory.CannotLoadBeanClassException :

c - NASM 数组指针操作

创建结构数组的数组