我要做的是在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));