在 Visual Studio 中放置并插入 unordered_map?
Posted
技术标签:
【中文标题】在 Visual Studio 中放置并插入 unordered_map?【英文标题】:Emplace and insert in unordered_map in Visual Studio? 【发布时间】:2016-02-12 03:12:04 【问题描述】:我正在努力使用 VS2010 在 c++ 中使用 unordered_map 做最基本的事情:插入一些东西。
unordered_map<string, string> cats;
//cats.insert("Adam", "Streak");
//cats.emplace("Kyra", "Shadow");
我确信我犯了一个非常简单的错误,但我现在花了两个小时试图弄清楚它是否有用。上面的注释行在取消注释时都会出错。
cats.insert("Adam", "Streak");
未注释时,错误为:
错误 1 错误 C2678: 二进制 '==' : 未找到采用 'const std::string' 类型的左操作数的运算符(或没有可接受的转换) c:\program files (x86)\ microsoft visual studio 10.0\vc\include\xfunctional
cats.emplace("Kyra", "Shadow");
未注释时,错误为:
错误 1 错误 C2780: 'std::pair<_ty1> std::_Hash<_traits>::emplace(_Valty &&)' : 需要 1 个参数 - 提供 2 个
我很困惑,因为互联网上有几个使用这种精确语法的例子。例如,cplusplus.com here。
我做错了什么?
【问题讨论】:
您的编译器很旧,仅部分支持 C++11... 很容易通过 google 找到详细信息,但如果可以,升级效率更高。 确切的sintax,你说? link 【参考方案1】:这两个函数都接受 std::pair<A,B>
make_pair
是最简单的配对方法。
cats.insert(std::make_pair("Adam", "Streak"));
cats.emplace(std::make_pair("Kyra", "Shadow"));
或
cats.insert(std::pair<std::string, std::string>("Adam", "Streak"));
http://ideone.com/43GqyB
【讨论】:
不幸的是,我在这样做时遇到了同样的错误 C2678。在这一点上,我倾向于 Visual Studio 非常破碎。 您使用的是哪个版本?我正在使用 VS 2015,它工作得非常好。我还添加了一个 ideone.com 链接,它也可以在那里工作。 谢谢何塞。我没有意识到 unordered_map 是在 c++11 中引入的。升级到 VS2015 后,它按预期工作。以上是关于在 Visual Studio 中放置并插入 unordered_map?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Visual Studio Code 中放置自定义输入以进行调试