Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何从std::map::emplace()获取对插入对象的引用?_C++_C++11_Stdmap - Fatal编程技术网

C++ 如何从std::map::emplace()获取对插入对象的引用?

C++ 如何从std::map::emplace()获取对插入对象的引用?,c++,c++11,stdmap,C++,C++11,Stdmap,如何从std::map::emplace()获取对插入对象的引用? 官方文件。 我添加了自动插入=m.emplace(“d”,“ddd”) 您能否演示如何获取刚刚插入的“ddd”? 我收到一些可笑的类型struct std::_Rb\u tree\u iterator,但找不到任何文档或示例如何使用它 #include <iostream> #include <utility> #include <string> #include <map> i

如何从
std::map::emplace()
获取对插入对象的引用? 官方文件。 我添加了
自动插入=m.emplace(“d”,“ddd”)

您能否演示如何获取刚刚插入的
“ddd”

我收到一些可笑的类型
struct std::_Rb\u tree\u iterator
,但找不到任何文档或示例如何使用它

#include <iostream>
#include <utility>
#include <string>

#include <map>
int main()
{
    std::map<std::string, std::string> m;

    // uses pair's template constructor
    auto inserted = m.emplace("d", "ddd");

    for (const auto &p : m) {
        std::cout << p.first << " => " << p.second << '\n';
    }
}
#包括
#包括
#包括
#包括
int main()
{
std::map m;
//使用pair的模板构造函数
自动插入=m.emplace(“d”,“ddd”);
用于(常数自动和p:m){

std::cout
map.emplace
返回一个包含迭代器to对象和布尔值()

map的迭代器是指向一对键和值的指针。因此,您可以执行以下操作:

auto inserted = m.emplace("d", "ddd");
if (inserted.second == true)
{
    auto &ref_to_ddd = inserted.first->second;
}

如果定位失败怎么办?你的引用是什么?@juanchopanza offtopic。你可以使用
find()
进行状态检查,然后将返回的迭代器点与
end()进行比较
是的,但是引用必须引用一个有效的对象。这就是为什么
emplace
给你一个迭代器,它不必引用一个有效的对象,还有一个bool,它告诉你emplace是否成功。我不确定你有什么问题。@juanchopanza你能演示一下如何获取
std::string&
插入
“ddd”
?它显然存在于地图中。我可以,但我不确定您遇到的问题是哪一部分。对我来说,从您链接的文档中似乎非常清楚。