C ++ Std :: find()对泛型/对

时间:2015-12-01 00:33:25

标签: c++ c++11

当我使用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有关,但我不确定,因为它似乎不应该导致错误。

感谢任何帮助,谢谢

1 个答案:

答案 0 :(得分:2)

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; });

我猜你正在使用它作为某种平面地图,所以你实际上想要检查该对中的第一个成员是否已经在列表中。在这种情况下,您可以使用str(x[k]).encode('utf-8')指定自己的比较谓词,例如

str(x[k])