C++ 通过无序集访问类数据工作不正常?
如果在尝试访问我的数据成员时遇到问题,我可以使用第二组眼睛来查看发生了什么。我的所有类get函数都遵循以下格式: 数据类型getItem()常量{return item} 这是我的密码: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
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()) );