C++ (c+;+;)可以';t在键哈希函数中迭代向量

C++ (c+;+;)可以';t在键哈希函数中迭代向量,c++,hash,iterator,C++,Hash,Iterator,我试图实现,比如说一个整数向量: struct Key { std::vector<int> vec; bool operator==(const Key &other) const { return (vec == other.vec); } }; struct KeyHasher { std::size_t operator()(const Key& k) const { using std::size_t; std::s

我试图实现,比如说一个整数向量:

struct Key
{
  std::vector<int> vec;

  bool operator==(const Key &other) const
  { return (vec == other.vec); }

};

struct KeyHasher
{
  std::size_t operator()(const Key& k) const
  {
    using std::size_t;
    std::size_t res = 0;

    std::vector <int>::iterator i;
    for (i = k.vec.begin(); i != k.vec.end(); ++i)
    {/* hash code */}

    return res;
  }
};
被g++拒绝:

'no match for operator=' (operand types are 'std::vector<int>::iterator [...]'
“运算符=”不匹配(操作数类型为“std::vector::iterator[…]”

发生了什么?在另一个上下文中,这个语法是可以的:我的错误在哪里?

i
需要是
const\u迭代器
k
,因此
k.vec
在这里是
const
。(更好的方法是使用
auto
i
需要是
const\u迭代器
k
,因此
k.vec
在这里是
const
。最好使用
auto
。尝试使用const\u迭代器而不是迭代器。 k是常数

std::vector <int>::const_iterator i;
std::vector::const_迭代器i;

否则,您将需要删除常量…

尝试使用常量迭代器而不是迭代器。 k是常数

std::vector <int>::const_iterator i;
std::vector::const_迭代器i;

否则,你需要删除常量……/P>记住AutoC++C++ 11,所以如果你使用一个旧的编译器,那么SistyTyrAtter将是你唯一的选择。的确,STD::vector::SistaIdulter I;做这个把戏,谢谢……或者更好的是(Audii=K.VEC.NeX);i!= k.VEC.Enter();++i)如果没有使用任何其他的声明,请记住AutoC++是C++ 11的特性,所以如果你使用的是旧编译器,那么SistyTyrAtter将是你唯一的选择。没有任何其他声明。谢谢,我不知道常量迭代器。谢谢,我不知道常量迭代器。