C++Std::find()在泛型/对上失败
C++ Std::find() fails over generics/pair
当我使用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;
});
相关文章:
- 错误处理.将系统错误代码映射到泛型
- 如果有一个模板构造函数只有一个泛型参数,为什么我必须有一个复制构造函数
- 链表的泛型函数remove()与成员函数remove)
- 给定一个类型,如何派生一个泛型更广泛的类型(例如,用于溢出安全求和)?
- 模板化接口 - 创建一个泛型模板类以返回任何容器
- 如何编写将要继承的泛型代码?
- C++17 如何保存泛型可调用对象以供以后使用
- 使用宏扩展的泛型:为什么指令缓存使用不当?
- C++泛型类错误,问题出在哪里?
- C++泛型类,单独实现?
- 将参数传递给泛型 lambda 时复制构造函数不正确
- 泛型枚举和其他类型的重载模板函数
- 使用泛型类型推送到堆栈时出现问题
- 可变参数泛型 lambda 和函数重载
- C++ 泛型和多态性:这种模式可行吗?
- 这些语句是否等效(静态变量、常量变量和泛型)
- 为什么 std::apply 使用泛型函数失败
- C++Std::find()在泛型/对上失败
- 递归泛型函数用作谓词,编译失败
- 在存在泛型构造函数的情况下,对三元运算符的SFINAE失败