0

私は次のようにテンプレートパラメータを使用して stl マップを宣言しようとしています:( T を typename と仮定しますtemplate <class T>:)

map<T, T> m;(.h ファイル内)

それはうまくコンパイルされます。現在、私のcppファイルでは、マップに挿入したいときにできません。私がインテリセンスで取得する唯一のメソッドは、「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
};
4

1 に答える 1

1

キーと値のペアを a に挿入する通常の方法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します。)

于 2012-09-02T03:48:11.857 に答える