C++ 为什么我不能迭代这个c++;地图出现错误,好像我无法使用<;操作人员 #包括“usersim.h” UserSim::UserUserSim(字符串和查询url): _查询url(查询url) { } void usersim::calculate(){ ifstream infle(_query_url.c_str()); 弦线; while(填充){ 国际电影联合会; int用户标识; 填充>>行; 如果(行[line.length()-1]==':'){ movie_id=atoi(line.c_str()); cout

C++ 为什么我不能迭代这个c++;地图出现错误,好像我无法使用<;操作人员 #包括“usersim.h” UserSim::UserUserSim(字符串和查询url): _查询url(查询url) { } void usersim::calculate(){ ifstream infle(_query_url.c_str()); 弦线; while(填充){ 国际电影联合会; int用户标识; 填充>>行; 如果(行[line.length()-1]==':'){ movie_id=atoi(line.c_str()); cout,c++,map,C++,Map,在最后一行中,尝试以下操作: g++ src/main.cpp src/CorpusExp.cpp src/MovieList.cpp src/MovieDictionary.cpp src/UserDictionary.cpp src/UserList.cpp src/UserUserSim.cpp -o recommend src/UserUserSim.cpp: In member function ‘void UserUserSim::getTop(int&)’: src/Use

在最后一行中,尝试以下操作:

g++ src/main.cpp src/CorpusExp.cpp src/MovieList.cpp src/MovieDictionary.cpp src/UserDictionary.cpp src/UserList.cpp src/UserUserSim.cpp -o recommend
src/UserUserSim.cpp: In member function ‘void UserUserSim::getTop(int&)’:
src/UserUserSim.cpp:81: error: no match for ‘operator<’ in ‘it_map < user_score_map. std::map<_Key, _Tp, _Compare, _Alloc>::end [with _Key = int, _Tp = float, _Compare = std::less<int>, _Alloc = std::allocator<std::pair<const int, float> >]()’
make: *** [recommend] Error 1

您应该在所有代码中遵循此模式。

您需要将问题减少到最少的代码量!大多数代码似乎与问题完全无关

问题是双向迭代器没有定义小于关系。您只需要比较它们是否相等或不相等。只需使用

for (it_map = user_score_map.begin(); it_map != user_score_map.end(); ++it_map)
而不是

it != map.end()
it
关系比较,如运算符
等,仅对随机访问迭代器可用


std::map
迭代器是双向迭代器,这是一个比随机访问弱得多的规范。您不能使用双向迭代器的关系比较。map迭代器仅在相等性方面具有可比性。在循环条件中使用
!=
比较,而不是
您需要随机访问迭代器才能进行比较用“yes,it works!!!所以实际上我不应该写yes,你应该写”``!=''''')这告诉编译器在迭代器到达映射末尾时停止循环。
it != map.end()
it < map.end()