使用模板参数初始化stl类

时间:2012-09-02 02:51:15

标签: c++ stl map initialization std

我试图用模板参数声明一个stl贴图,如下所示: (假设T为typename,如:template <class T>

map<T, T> m;(在.h文件中)

编译好。现在在我的cpp文件中,当我想插入地图时,我无法做到。我在intellisense上获得的唯一方法是“at”和“swap”方法。

有什么想法吗?有人请吗?

提前致谢。

这是示例代码:

#pragma once

#include <iostream>
#include <map>

using namespace std;

template <class T> 

class MySample  
{  
map<T, T> myMap;
//other details omitted

public:

//constructor 
MySample(T t)
{
    //here I am not able to use any map methods. 
    //for example i want to insert some elements into the map
    //but the only methods I can see with Visual Studio intellisense
    //are the "at" and "swap" and two other operators
    //Why???
    myMap.  
}

//destructor
~MySample(void)
{

}
//other details omitted
};

1 个答案:

答案 0 :(得分:1)

将键值对插入std::map的常用方法是索引运算符语法和insert函数。对于示例,我假设std::string代表键,int代表值:

#include <map>
#include <string>

std::map<std::string,int> m;
m["hello"] = 4;  // insert a pair ("hello",4)
m.insert(std::make_pair("hello",4)); // alternative way of doing the same

如果您可以使用C ++ 11,则可以使用新的统一初始化语法而不是make_pair调用:

m.insert({"hello",4});

而且,如评论中所述,还有

m.emplace("hello",4);

在C ++ 11中,它就地构造新的键值对,而不是在地图之外构造它并将其复制进来。


我应该补充一点,因为你的问题实际上是关于初始化,而不是插入新元素,并且确实你在MyClass的构造函数中这样做了,你应该做什么(在C ++ 11中)是这样的:

MySample(T t)
 : myMap { { t,val(t) } }
{}

(这里我假设有一些函数val生成在地图中存储t的值。)