插入unordered_map

时间:2017-07-19 01:57:15

标签: c++ string unordered-map

我要做的是在c ++类中基本上有一个键值存储,以便我可以通过键查找它的值。我一直在尝试使用unordered_map来执行与此类似的代码。 (我已经简化了一点,但你明白了。)

#include <string>
#include <unordered_map>
#include <iostream>

class manager
{
public:
manager() {}
~manager(){}

void add(const std::string& name, unsigned int val) {
    map.insert(std::make_pair<std::string, unsigned int>(name, val));
}

unsigned int GetValue(const std::string& key) {
    return map[key];
}

std::unordered_map<std::string, unsigned int> map;
};

int main(void)
{
manager* mgr = new manager();
mgr->add("Bob",22);

std::cout << "Bob is" << mgr->GetValue("Bob") << std::endl;

return 0;

}

我只想以一种方式存储名称和值,以便我可以轻松地按名称查找值,并在完成后轻松清理它以避免内存泄漏。

当我在Linux(g ++ -o test test.cpp)上编译它时,我得到以下内容:

  

test.cpp:在成员函数'void manager :: add(const string&amp; ,,   unsigned int)':test.cpp:12:65:错误:没有匹配的调用函数   'make_pair(const string&amp;,unsigned int&amp;)'
  map.insert(std :: make_pair(name,val));                                                                    ^在/usr/include/c++/6/bits/stl_algobase.h:64:0中包含的文件中,                    来自/usr/include/c++/6/bits/char_traits.h:39,                    from / usr / include / c ++ / 6 / string:40,                    来自test.cpp:1:/usr/include/c++/6/bits/stl_pair.h:497:5:注意:候选人:   模板constexpr std :: pair :: __ type,typename   的std :: __ decay_and_strip&LT; _T2&GT; :: __类型&GT; std :: make_pair(_T1&amp;&amp;,_T2&amp;&amp;)        make_pair(_T1&amp;&amp; __x,_T2&amp;&amp; __y)        ^ ~~~~~~~~ / usr /include/c++/6/bits/stl_pair.h:497:5:注意:模板参数推断/替换失败:test.cpp:12:56:注意:   无法转换'name'(类型'const string {aka const   输入std :: __ cxx11 :: basic_string}')   “的std :: __ cxx11 :: basic_string的&安培;&放大器;”
  map.insert(std :: make_pair(name,val));

1 个答案:

答案 0 :(得分:2)

std::make_pair签名错误。应该是:

map.insert(std::make_pair(name, val));