C++Std::find()在泛型/对上失败

C++ Std::find() fails over generics/pair

本文关键字:失败 泛型 find C++Std      更新时间:2023-10-16

当我使用C++11从非通用驱动程序类以字符串形式传递类型时出现的给定错误(下面的伪代码,不能真正提供一个可编译的小示例):

stl_algo.h|135|error: no match for 'operator==' in '__first.std::_List_iterator<_Tp>::operator*<std::pair<std::basic_string<char>, std::basic_string<char> > >() == __val'|

我有一个通用型矢量

template <typename A, typename B>
vector<list<pair<A,B>> > myList;

我正在尝试从此对列表中插入/删除元素,但遇到了这种类型的错误。

.#include <algorithm>
template <typename A, typename B>
bool addToList(const pair<A,B> &searchPair){
    auto & tempIndexList = myList[0];
    auto itr = std::find(std::begin(tempIndexList),std::end(tempIndexList), searchPair.first);  //Line where error occurs
}

我尝试过从"searchPair.first"更改为"searchPair",但仍然失败,并出现相同的错误。我认为这与它是const这一事实有关,但我真的不确定,因为它似乎不应该导致错误。

感谢

std::find正试图将列表的value_type(即pair<A, B>)与该对中的第一个成员(即类型A)进行匹配。

我猜你是在用它作为某种平面图,所以你实际上想检查这对中的第一个成员是否已经在列表中了。在这种情况下,您可以使用std::find_if指定自己的比较谓词,例如

std::find_if(std::begin(list), std::end(list),
             [&searchPair] (const auto& val) {
                 return val.first == searchPair.first;
             });