【问题标题】:Type conversion issues with inserting into unordered_map [duplicate]插入 unordered_map 的类型转换问题 [重复]
【发布时间】: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));

【问题讨论】:

  • 您可能需要包含实用程序标头。
  • 你为什么使用newmanager mgr; mgr.add(...); 怎么了?
  • 如何使用 [] 运算符。 void add( const std::string& name, unsigned int val) { map[name]= val; }
  • 正在使用 new 获取指针,我可以根据需要将其传递给其他方法进行访问。

标签: c++ string unordered-map


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-13
    相关资源
    最近更新 更多