C++ - 通过引用模板函数传递 STL 映射

Posted

技术标签:

【中文标题】C++ - 通过引用模板函数传递 STL 映射【英文标题】:C++ - Passing STL map by reference to a templated function 【发布时间】:2016-09-28 06:34:20 【问题描述】:

这段代码出了什么问题,因为我遇到了分段错误 按值返回 map 似乎没有问题。

#include<bits/stdc++.h>
using namespace std;

template<typename T>
T myMapIntersect(T& left, T& right)
 

int main()

    map<string, int> m;
    m["aa"] = 1;
    m["bb"] = 1;
    m["vf"] = 1;
    m["hh"] = 1;

    myMapIntersect< map<string,int> >(m, m);
    return 0;

【问题讨论】:

OT:您可能不应该直接包含来自bits 的内容。 @AmiTavory 为什么? 嗯,myMapIntersect的回报在哪里? 因为它是不能保证保持固定的事物的约定。假设在下一个版本中,该文件将是bits/std_cpp.hpp。外部目录文件会相应地修改,它们是你应该直接使用的。 见Why should I not #include <bits/stdc++.h>? 【参考方案1】:

你需要在你的函数中返回

#include<bits/stdc++.h>
using namespace std;

template<typename T>
T myMapIntersect(T& left, T& right)

    return left;


int main()

    map<string, int> m;
    m["aa"] = 1;
    m["bb"] = 1;
    m["vf"] = 1;
    m["hh"] = 1;

    myMapIntersect< map<string,int> >(m, m);
    return 0;

【讨论】:

以上是关于C++ - 通过引用模板函数传递 STL 映射的主要内容,如果未能解决你的问题,请参考以下文章

STL 之 list源码自行实现(iterator)

函数模板的使用说明

stl入门

c++ stl函数模板类型推导

C++ STL 基础及应用 模板与操作符重载

开心档之C++ STL 教程