C++ 通过无序集访问类数据工作不正常?

C++ 通过无序集访问类数据工作不正常?,c++,data-structures,C++,Data Structures,如果在尝试访问我的数据成员时遇到问题,我可以使用第二组眼睛来查看发生了什么。我的所有类get函数都遵循以下格式: 数据类型getItem()常量{return item} 这是我的密码: void listHash(int N, int MIN, string OFF, string DEF, int DOWN, int TOGO, int YARDLINE, vector<NFLData>& vdata){ vector<NFLData> relevan

如果在尝试访问我的数据成员时遇到问题,我可以使用第二组眼睛来查看发生了什么。我的所有类get函数都遵循以下格式: 数据类型getItem()常量{return item}

这是我的密码:

void listHash(int N, int MIN, string OFF, string DEF, int DOWN, int TOGO, int YARDLINE, vector<NFLData>& vdata){
    vector<NFLData> relevance;
    unordered_set<NFLData> data;

    for(int i = 0; i < vdata.size(); i++){
        data.insert(NFLData(vdata[i].getLine()));
    }
    unordered_set<NFLData>::iterator itr = data.begin();
    for(itr; itr != data.end(); ++itr){
        if(OFF == itr->getOffenseTeam()){
            if(DOWN == itr.getDown()){
            float rel;
            rel = -( (float)( abs(MIN - data->getMinute()) * (float)(5/3)) + (float)abs(TOGO - data->getYardsToGo() ) + (float)abs(YARDLINE - data->getYardline()) );
            if(DEF== itr->getOffenseTeam()){
                rel +=100;
            }
            string datas;
            datas = itr->getLine();
            relevance.push_back(NFLData(datas));
            }
        }
    }
void listHash(int N,int MIN,string OFF,string DEF,int DOWN,int TOGO,int YARDLINE,vector&vdata){
向量相关性;
无序的集合数据;
对于(int i=0;igetOffenseTeam()){
if(DOWN==itr.getDown()){
浮动汇率;
rel=-((float)(abs(MIN-data->getMinute())*(float)(5/3))+(float)abs(TOGO-data->getYardsToGo())+(float)abs(YARDLINE-data->getYardline());
如果(DEF==itr->getOffenseTeam()){
rel+=100;
}
字符串数据;
datas=itr->getLine();
相关性。推回(NFLData(数据));
}
}
}
以下是我尝试从迭代器调用函数时的错误:

driver_broke.cpp: In function âvoid listHash(int, int, std::string, std::string, int, int, int, std::vector<NFLData, std::allocator<NFLData> >&)â:
driver_broke.cpp:167: error: âstruct std::tr1::__detail::_Hashtable_iterator<NFLData, true, false>â has no member named âgetDownâ
driver_broke.cpp:169: error: base operand of â->â has non-pointer type âstd::tr1::unordered_set<NFLData, std::tr1::hash<NFLData>, std::equal_to<NFLData>, std::allocator<NFLData> >â
driver_broke.cpp:169: error: base operand of â->â has non-pointer type âstd::tr1::unordered_set<NFLData, std::tr1::hash<NFLData>, std::equal_to<NFLData>, std::allocator<NFLData> >â
driver_broke.cpp:169: error: base operand of â->â has non-pointer type âstd::tr1::unordered_set<NFLData, std::tr1::hash<NFLData>, std::equal_to<NFLData>, std::allocator<NFLData> >â
if(DOWN == itr->getDown())
//            ^^
//           Here
driver\u break.cpp:In函数-void listHash(int,int,std::string,std::string,int,int,std::vector&)中:
驱动程序\u break.cpp:167:错误:struct std::tr1::\u详细信息::\u哈希表\u迭代器–没有名为-getDown的成员
驱动程序\u break.cpp:169:error:-->的基操作数具有非指针类型–std::tr1::无序\u集–
驱动程序\u break.cpp:169:error:-->的基操作数具有非指针类型–std::tr1::无序\u集–
驱动程序\u break.cpp:169:error:-->的基操作数具有非指针类型–std::tr1::无序\u集–

迭代器具有指针语义。因此,您应该使用
->
通过迭代器访问成员:

driver_broke.cpp: In function âvoid listHash(int, int, std::string, std::string, int, int, int, std::vector<NFLData, std::allocator<NFLData> >&)â:
driver_broke.cpp:167: error: âstruct std::tr1::__detail::_Hashtable_iterator<NFLData, true, false>â has no member named âgetDownâ
driver_broke.cpp:169: error: base operand of â->â has non-pointer type âstd::tr1::unordered_set<NFLData, std::tr1::hash<NFLData>, std::equal_to<NFLData>, std::allocator<NFLData> >â
driver_broke.cpp:169: error: base operand of â->â has non-pointer type âstd::tr1::unordered_set<NFLData, std::tr1::hash<NFLData>, std::equal_to<NFLData>, std::allocator<NFLData> >â
driver_broke.cpp:169: error: base operand of â->â has non-pointer type âstd::tr1::unordered_set<NFLData, std::tr1::hash<NFLData>, std::equal_to<NFLData>, std::allocator<NFLData> >â
if(DOWN == itr->getDown())
//            ^^
//           Here
计算
rel
时,您引用的是
数据
,而不是
itr

rel = -( (float)( abs(MIN - itr->getMinute()) * (float)(5/3)) + (float)abs(TOGO - itr->getYardsToGo() ) + (float)abs(YARDLINE - itr->getYardline()) );

迭代器具有指针语义。因此,您应该使用
->
通过迭代器访问成员:

driver_broke.cpp: In function âvoid listHash(int, int, std::string, std::string, int, int, int, std::vector<NFLData, std::allocator<NFLData> >&)â:
driver_broke.cpp:167: error: âstruct std::tr1::__detail::_Hashtable_iterator<NFLData, true, false>â has no member named âgetDownâ
driver_broke.cpp:169: error: base operand of â->â has non-pointer type âstd::tr1::unordered_set<NFLData, std::tr1::hash<NFLData>, std::equal_to<NFLData>, std::allocator<NFLData> >â
driver_broke.cpp:169: error: base operand of â->â has non-pointer type âstd::tr1::unordered_set<NFLData, std::tr1::hash<NFLData>, std::equal_to<NFLData>, std::allocator<NFLData> >â
driver_broke.cpp:169: error: base operand of â->â has non-pointer type âstd::tr1::unordered_set<NFLData, std::tr1::hash<NFLData>, std::equal_to<NFLData>, std::allocator<NFLData> >â
if(DOWN == itr->getDown())
//            ^^
//           Here
计算
rel
时,您引用的是
数据
,而不是
itr

rel = -( (float)( abs(MIN - itr->getMinute()) * (float)(5/3)) + (float)abs(TOGO - itr->getYardsToGo() ) + (float)abs(YARDLINE - itr->getYardline()) );