C++ 在无序的_映射中插入元素会导致错误

C++ 在无序的_映射中插入元素会导致错误,c++,vector,unordered-map,C++,Vector,Unordered Map,我已经定义了一个像这样的无序图 struct pht { pht(int t, vector<bool> pat) : tag(t), pattern(32) {} private: int tag; vector<bool> pattern; }; unordered_map< pair<int, int>, pht > predictor; int main() { int pc, addr, offset, tag;

我已经定义了一个像这样的
无序图

struct pht {
  pht(int t, vector<bool> pat) 
: tag(t), pattern(32) {}
private:
  int tag;
  vector<bool> pattern;
};

unordered_map< pair<int, int>, pht > predictor;

int main()
{
  int pc, addr, offset, tag;
  vector<bool> pat;
  srand(time(0));

  tag = 1000; pc = 100; offset = 10; 
  for ( int i = 0; i < 32; i++ ) 
  pat.push_back( rand() % 2 );
  predictor.insert(make_pair( make_pair(pc, offset), pht(tag, pat) ) );
  return 0;
}
struct pht{
pht(int t,向量pat)
:tag(t),pattern(32){}
私人:
int标签;
矢量模式;
};
无序映射<配对,pht>预测因子;
int main()
{
int pc、地址、偏移量、标签;
向量pat;
srand(时间(0));
标签=1000;pc=100;偏移量=10;
对于(int i=0;i<32;i++)
轻拍后推(rand()%2);
预测器。插入(make_对(make_对(pc,offset),pht(tag,pat));
返回0;
}
但是我得到了这个错误:

(更新)

错误C2440:“类型转换”:无法从“const std::pair”转换为“size\t”

我如何解决这个问题?

错误消息具有误导性;真正的原因是,
unordered\u map
所要求的
std::hash
std::pair
没有专门化。您需要提供此专业化或(推荐)创建指定自定义哈希器的:

struct hash_pair {
    template <typename T, typename U>
    std::size_t operator ()(std::pair<T, U> const& p) const {
        using std::hash;
        return hash<T>()(p.first) ^ hash<T>()(p.second);
    }
};
struct hash\u对{
模板
std::size\u t运算符()(std::pair const&p)const{
使用std::hash;
返回hash()(p.first)^hash()(p.second);
}
};
然后将地图声明为:

unordered_map<pair<int, int>, pht, hash_pair> predictor;
无序映射预测器;

错误消息具有误导性;真正的原因是,
unordered\u map
所要求的
std::hash
std::pair
没有专门化。您需要提供此专业化或(推荐)创建指定自定义哈希器的:

struct hash_pair {
    template <typename T, typename U>
    std::size_t operator ()(std::pair<T, U> const& p) const {
        using std::hash;
        return hash<T>()(p.first) ^ hash<T>()(p.second);
    }
};
struct hash\u对{
模板
std::size\u t运算符()(std::pair const&p)const{
使用std::hash;
返回hash()(p.first)^hash()(p.second);
}
};
然后将地图声明为:

unordered_map<pair<int, int>, pht, hash_pair> predictor;
无序映射预测器;

predictor.insert(
需要一个
std::pair
作为参数,而不是一个键后跟一个值。问题是您没有阅读文档…我遵循了@mahmood中的示例:不,您没有…请下次发布一个完整的、最少的代码。您的代码至少缺少几个标题和一些使用
语句的
,使重现您的问题是不必要的困难。
predictor.insert(
需要一个
std::pair
作为参数,而不是一个键后跟一个值。问题是您没有阅读文档…我遵循了@mahmood中的示例:不,您没有…请下次发布一个完整的、最少的代码。您的代码至少缺少几个标题和一些使用
语句的
,使不必要地很难重现您的问题。我建议@MooingDuck有意义。我建议@MooingDuck有意义。