2016-07-10 8 views
1

Я - Javaer в течение многих лет и новичок в C++. В последнее время мне нужно работать над проектом на C++, но при использовании C++ возникают некоторые неприятные проблемы, одним из которых является std:map.ошибка несоответствия параметра в вставке карты

Я пытаюсь вставить пару ключ-значение в функцию карты.

map[key]=value или map.emplace(key,value) работает отлично, но map.insert дает мне [ошибка компиляции] (error), который я полностью потерял. Может кто-то помогает?

class mystructure{ 
private: 
    int value; 
public: 
    mystructure(int v){ 
     value=v; 
    } 
    void print(){ 
     std::cout<<value<<std::endl; 
    } 
    std::string get_Value(){ 
     return std::to_string(value); 
    } 
}; 

int main(void) { 

    std::map<std::string, mystructure> mymap; 
    std::vector<mystructure> v = std::vector<mystructure>(); 
    v.push_back(*(new mystructure(17))); 
    v.push_back(*(new mystructure(12))); 
    v.push_back(*(new mystructure(23))); 
    for (int i=0;i<v.size();i++) { 
     mystructure temp=v.at(i); 
     mymap.insert(temp.get_Value(),temp);//compilation error 
    } 
    return 0; 
} 
+0

'* (новый MyStructure (17)))' C++ является N от Java. Здесь вы создаете утечку памяти. «Новый» в Java - это не то же самое, что «новый» в C++. Используйте типы значений, а не указатели. 'v.push_back (mystructure (17));' – PaulMcKenzie

+0

@PaulMcKenzie вы правы, спасибо. –

ответ

3

Поскольку std::map::insert принимает std::map::value_type (т.е. std::pair<const Key, T>) в качестве параметра.

Вы могли бы использовать:

mymap.insert(std::pair<const std::string, mystructure>(temp.get_Value(), temp)); 

или

mymap.insert(std::make_pair(temp.get_Value(), temp)); 

или

mymap.insert({temp.get_Value(), temp}); 

LIVE

+0

Он по-прежнему сообщает о несоответствии ошибки. –

+0

@ShuhaoZhangtony Что такое сообщение об ошибке? Я попробовал [здесь] (http://rextester.com/JOELS2596). – songyuanyao

+0

Я думаю, что я, вероятно, нашел ошибку в CLion: после того, как я следую вашему предложению, он по-прежнему выделяет ошибку, но компилирует ... –