如何使用返回类型映射创建函数<>?

时间:2010-06-04 14:06:50

标签: c++ function map return

相当直截了当的问题。我有一个地图,我希望通过调用这样的函数来初始化:

map<string, int> myMap;

myMap = initMap( &myMap );

map<string, int> initMap( map<string, int> *theMap )
{
    /* do stuff... */

然而,编译器正在呻吟。这是什么解决方案?

编辑1:

对不起,但我搞砸了。代码是用*theMap正确编写的,但是当我发布问题时,我没有注意到我省略了*。所以为了回答评论,我得到的错误信息是:

1>Roman_Numerals.cpp(21): error C2143: syntax error : missing ';' before '<'

抛出

map<char, int> initMap( map<char, int> *numerals );

使用VC ++ 2010 Express并在定义函数时再次出现相同的错误。

8 个答案:

答案 0 :(得分:14)

要么:

map<string, int> myMap;
initMap( myMap );

void initMap( map<string, int>& theMap )
{
    /* do stuff in theMap */
}

或做:

map<string, int> myMap;
myMap = initMap(  );

map<string, int> initMap()
{
    map<string, int> theMap;
    /* do stuff in theMap */
    return theMap;
}

即。让函数初始化你给它的地图,或者获取函数给你的地图。你们两个都做了(没有return陈述!)

我会选择第一个选项。

答案 1 :(得分:8)

它可能会抱怨,因为您传递的是地图的地址,但是您的函数会按值接受地图。

你可能想要更像这样的东西:

void initMap(map<string, int>& theMap)
{
    /* do stuff...*/
}

答案 2 :(得分:3)

您应该接受指针或最好是地图的引用。为方便起见,您还可以返回参考:

map<string, int>& initMap( map<string, int>& theMap )
...
// Call initMap
map<string, int> my_map;
initMap(my_map);

答案 3 :(得分:3)

规范解决方案只是

std::map<std::string, int> initMap();
// ...
std::map<std::string, int> myMap = initMap();

为什么使用输入参数作为返回值的棘手尝试?性能?现代编译器不关心。事实上,不构建空地图会稍快一些。

答案 4 :(得分:1)

为什么不做无效的initMap(map&amp; theMap),而不是制作这么多的地图副本?

答案 5 :(得分:1)

&myMap是指向地图对象的指针,而参数theMap是地图对象。

两种解决方案:

myMap = initMap( &myMap );更改为myMap = initMap( myMap );

map<string, int> initMap( map<string, int> theMap )更改为map<string, int> initMap( map<string, int> * theMap )

答案 6 :(得分:0)

游戏有点晚了但是: 我会从错误消息中猜到你错过了

#include <map>

位于代码顶部。所以编译器不知道map应该是一个模板,因此它会被后面的尖括号弄糊涂。

答案 7 :(得分:-1)

 void initMap(map<String,int> &Map)
 {
   //Do something
 }