当我使用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有关,但我不确定,因为它似乎不应该导致错误。
感谢任何帮助,谢谢
答案 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])