Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用对象作为键时从STL映射返回迭代器_C++_Stl_Iterator - Fatal编程技术网

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

C++ 使用对象作为键时从STL映射返回迭代器,c++,stl,iterator,C++,Stl,Iterator,我对使用对象作为键从STL映射返回迭代器有问题 代码仅在执行map.insert()时编译,但不会编译试图使用从map.insert()返回的迭代器的行 编译器错误为“错误:运算符=”不匹配” 请参阅下面代码段中return语句前面有问题的行 谢谢你的帮助 #include <map> using namespace std; class Keys { public: Keys(int k1, int k2) : key1(k1), key2(k2) {

我对使用对象作为键从STL映射返回迭代器有问题

代码仅在执行map.insert()时编译,但不会编译试图使用从map.insert()返回的迭代器的行

编译器错误为“错误:运算符=”不匹配”

请参阅下面代码段中return语句前面有问题的行

谢谢你的帮助

#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;
}
#包括
使用名称空间std;
类密钥{
公众:
按键(int k1,int k2):
键1(k1),键2(k2){
}
布尔运算符您需要使用:

 pair<map<Keys,int>::iterator,bool> ret;
 ret = mymap.insert(std::pair<Keys, int>(Keys(1, 2), 3));
pairret;
ret=mymap.insert(std::pair(键(1,2,3));

请注意文档中的返回值。

您需要使用std::map的适当重载函数,该函数返回迭代器。 现在,您正在使用带有一个参数的std::map::insert,它返回std::pair,但不是迭代器。 您应该使用以下选项:

std::map<>::iterator std::map::insert( iterator _where, value_type val );

他可以使用
std::make_pair(键(1,2),3)
代替
std::pair(键(1,2,3)
感谢您的快速且信息丰富的回复。在向对象添加多个键的过程中,我从multimap切换到了multimap,愚蠢地错过了map和multimap之间返回值的差异-如果没有快速帮助,我可以一直盯着这个-谢谢!@Nawaz:当然可以。我刚刚回答了问题。我想OP是在学习如何使用
std::map
的过程中,想要尝试使用
pair
而不是实用功能
make\u pair()
,这当然是一个更好的选择。@Als:如果您还添加了更好的Altenactive,我会对其进行投票。-@Nawaz:您已经将其添加为注释,因此我宁愿对您的注释进行投票,并将其保留为:)
myitr = mymap.insert( std::begin( mymap ), std::make_pair( Keys(1, 2), 3) );