【发布时间】:2017-07-19 01:57:14
【问题描述】:
我要做的基本上是在 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&, unsigned int)': test.cpp:12:65: error: no matching function for call 到‘make_pair(const string&, unsigned int&)’
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, 来自 /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<_t2>::__type> std::make_pair(_T1&&, _T2&&) make_pair(_T1&& __x, _T2&& __y) ^~~~~~~~~ /usr/include/c++/6/bits/stl_pair.h:497:5:注意:模板参数推导/替换失败:test.cpp:12:56:注意: 无法转换“名称”(键入“常量字符串 {aka const std::__cxx11::basic_string}') 输入 'std::__cxx11::basic_string&&'
map.insert(std::make_pair(name, val));
【问题讨论】:
-
您可能需要包含实用程序标头。
-
你为什么使用
new?manager mgr; mgr.add(...);怎么了? -
如何使用 [] 运算符。 void add( const std::string& name, unsigned int val) { map[name]= val; }
-
正在使用 new 获取指针,我可以根据需要将其传递给其他方法进行访问。
标签: c++ string unordered-map