使用对象作为键时,从STL映射返回迭代器

时间:2012-02-20 02:49:48

标签: c++ stl iterator

我在使用对象作为键从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;
}

2 个答案:

答案 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) );