无效的操作数编译器错误涉及std :: quare_range
Invalid operand compiler error involving std::equal_range
用于使用以下模板实现间隔映射
template<class K, class V>
intervalMap{
public:
intervalMap(V const&);
public:
void assign(K const&, K const&, V const&);
private:
std::map<K,V>m_map;
};
以及成员函数中的以下代码段assign()
:
template<class K, class V> void intervalMap::assign(
K const& keyBegin,
K const& keyEnd,
V const& val
){
auto begin = m_map.find(keyBegin);
auto end = m_map.find(keyEnd);
auto p = std::equal_range(begin,end,val);
}
和main((
中的以下实例化intervalMap<unsigned int, char> iMap('A');
iMap.assign(1,2,'A');
以下汇编错误结果:
In file included from main.cpp:1:
In file included from ./code.hpp:4:
In file included from /Library/Developer/CommandLineTools/usr/
include/c++/v1/map:442:
In file included from /Library/Developer/CommandLineTools/usr
/include/c++/v1/__tree:18:
/Library/Developer/CommandLineTools/usr/include/
c++/v1/algorithm:701:71:
error: invalid operands to binary expression
('const std::__1::pair<const unsigned int, char>' and 'int')
bool operator()(const _T1& __x, const _T2& __y)
const {return __x < __y;}
~~~ ^ ~~~
错误与以下源代码段有关(如错误日志中突出显示(:
./code.hpp:120:18: note: in instantiation of function
template specialization 'std::__1::equal_range
<std::__1::__map_iterator
<std::__1::__tree_iterator
<std::__1::__value_type
<unsigned int, char>,
std::__1::__tree_node
<std::__1::__value_type
<unsigned int, char>,
void *> *, long> >,
char>'
requested here
auto p = equal_range(begin,end,val);
^
./code.hpp:205:10: note:
in instantiation of member function
'interval_map<unsigned int, char>::assign'
requested here
iMap.assign(1,2,'A');
感谢建议。
错误是由于比较v表示的std ::配对和模板变量,在这种情况下为char。为了避免这种情况,您可以使用下面的服装谓词。
template<class K, class V>
class intervalMap{
public:
intervalMap(V val)
{
v = val;
}
public:
void assign(K const a, const K b, const V c);
private:
V v;
std::map<K,V> m_map;
};
template<class K, class V>
struct comp
{
bool operator()(std::pair<K, V> a, V b)
{
return a.second < b;
}
bool operator()(V a, std::pair<K, V> b)
{
return a < b.second;
}
};
template<class K, class V>
void intervalMap<K, V>::assign(const K keyBegin, const K keyEnd, const V
val)
{
auto begin = m_map.find(keyBegin);
auto end = m_map.find(keyEnd);
auto p = std::equal_range(begin, end, val,comp< K, V>());
}
相关文章:
- 使用std::multimap迭代器创建std::list
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- 从持续时间构造std::chrono::system_clock::time_point
- std::具有相同基类的类的变体
- std::向量与传递值的动态数组
- 使用std::vector的OpenCL矩阵乘法
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- std::condition_variable::wait()如何评估给定的谓词
- 如何获取std::result_of函数的返回类型
- std::原子加载和存储都需要吗
- 将对象移动到std::shared_ptr
- POCO::PostgreSQL:如何将std::vector支持添加到`Binder::bind`
- 使用一个考虑到std::map中键值的滚动或换行的键
- 如何从 std::atomic 中提取指针 T<T>?
- 为什么 std::unique 不调用 std::sort?
- 使用std::函数映射对象方法
- 可组合的lambda/std::函数与std::可选