我在使用对象作为键从STL映射返回迭代器时遇到问题。
代码只在执行map.insert()时编译,但不会编译试图使用map.insert()返回的迭代器的行。
编译器错误是“错误:不匹配'operator ='”
请参阅下面代码段中返回语句前面的违规行。
感谢您的帮助!
#include <map>
using namespace std;
class Keys {
public:
Keys(int k1, int k2) :
key1(k1), key2(k2) {
}
bool operator<(const Keys &right) const {
return (key1 < right.key1 && key2 < right.key2);
}
int key1;
int key2;
};
int main() {
std::map<Keys, int> mymap;
map<Keys,int>::iterator myitr;
mymap.insert(std::pair<Keys, int>(Keys(3, 8), 5));
myitr = mymap.insert(std::pair<Keys, int>(Keys(1, 2), 3));
return 0;
}
答案 0 :(得分:2)
您需要使用:
pair<map<Keys,int>::iterator,bool> ret;
ret = mymap.insert(std::pair<Keys, int>(Keys(1, 2), 3));
请注意 std::map::insert() 文档中的返回值。
答案 1 :(得分:2)
您需要使用std :: map的适当重载函数,它返回一个迭代器。 现在,您使用带有一个参数的std :: map :: insert,它返回std :: pair但不返回迭代器。 你应该用这个:
std::map<>::iterator std::map::insert( iterator _where, value_type val );
因此,您的代码应如下所示:
myitr = mymap.insert( std::begin( mymap ), std::make_pair( Keys(1, 2), 3) );