没有要调用的匹配函数。 C++ 标准语言

No Matching function to call. C++ STL

我是 C++ STL 的新手。我正在编写一个函数来检查一个向量是否是另一个向量的子集(重复元素也算在内)并打印 'Yes' 或 'No'。我想出了以下代码:

void checkMagazine(vector<string> magazine, vector<string> note) {
    vector<string>::iterator a;
    for(int i=0;i<note.size();i++)
    {
        a=find(magazine.begin(),magazine.end(),note[i]);
        if(a==magazine.end())
        {
            printf("No");
            return;
        }else magazine.erase(a-magazine.begin());
    }
    printf("Yes");
}

但是,我收到以下编译错误:

error: no matching function for call to ‘std::vector<std::__cxx11::basic_string<char>
>::erase(__gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char>*,
std::vector<std::__cxx11::basic_string<char> > >::difference_type)’
         }else magazine.erase(a-magazine.begin());

我正在尝试使用擦除删除 magazine.Is 中找到的元素迭代器的声明类型有问题吗?为什么会这样? 而且,如果有其他 methods/logic/inbuilt-functions 可以使用 STL 完成所需的工作,请告诉我,因为我是新手,正在尝试学习它。

erase 采用迭代器。你有那个迭代器,它叫做 a。但是您随后将迭代器 a 转换为相对于 begin() 的偏移量。 erase 没有需要偏移量的重载。

如果对向量进行排序,标准库有备选方案,但我们没有看到调用代码,因此我们不能假设。