2011-10-25 8 views
1

私のプログラムはC++で書かれています。std :: map <string、class>キーの値を表示

#include <iostream> 
#include <string> 
#include <map> 

using namespace std; 


    class Details 
    { 
     int x; 
     int y; 
    }; 

    typedef std::map<string, Details> Det; 
    Det det; 

    Details::Details(int p, int c) { 
     x = p; 
     y = c; 
    } 

    int main(){ 

     det.clear(); 

     insertNew("test", 1, 2); 

     cout << det["test"] << endl; 

     return 0; 
    } 

最も簡単な方法でキーの値を印刷したいと考えています。例えばdet ["test"]がコンパイルに失敗します。 キー "test"に対応する(x、y)の値(1,2)を出力する方法はありますか?

+4

上記のコードには構文エラーがあり、有効なプログラムではありません。あなたがコンパイルできなかった実際のコードを与えてください。 – ybungalobill

+1

コードの最後に2つの閉じ括弧がありません。 – LowTechGeek

+0

@ybungalobill、我々は正しいです。私は実際のコードで質問を更新します – cateof

答えて

3

Objにデフォルトまたはコピーコンストラクタがありません(あなたが投稿したコードには何もありませんが、2つの整数をとるものと仮定します)。また、catalog.insert()行に誤字があります。私は少しあなたのコードに変更しました

for(auto ob = catalog.begin(); ob != catalog.end(); ++ob) 
{ 
    cout << ob->first << " " << ob->second.x << " " << ob->second.y; 
} 
+1

ああ、あなたは忍者が私を編集しました! :)別の答えに記されているように、演算子<<を作成するか、x、yメンバーにアクセスする必要があります。 – JoeFish

+0

同じ値に対して 'operator [] 'を複数回実行すると、パフォーマンスが著しく低下する可能性があります。 – Chad

+0

私は確かに同じC文字列をstd :: stringに変換しても何度も繰り返します。このコードは、元の質問と同様の方法でマップにアクセスすることを示しています。 – JoeFish

2

クラスObjoperator<<を作成して、std::cout << catalog["test"];のようにすることができます(挿入呼び出しの不足している括弧はコピー貼りだけです)。

0

を考えると、これらの種類::人口catalogオブジェクトを考える

class Obj { 
    int x; 
    int y; }; 

std::map<string, Obj> catalog; 

ここにあなたのコードを使用して、私のために働いていたものです。

#include <map> 
#include <iostream> 
#include <string> 

using namespace std; 
class Obj { 
    public: 
      Obj(int in_x, int in_y) : x(in_x), y(in_y) 
      {}; 
      int x; 
      int y; 
    }; 

int main() 
{ 
    std::map< string, Obj* > catalog; 
    catalog[ "test" ] = new Obj(1,2); 

    for(std::map<string, Obj*>::iterator i=catalog.begin(); i != catalog.end(); ++i) 
    { 
      cout << "x:" << i->second->x << " y:" << i->second->y << endl; 
    } 
} 
1

class Obj { 
public: 
    Obj() {} 
    Obj(int x, int y) : x(x), y(y) {} 
    int x; 
    int y; 
    }; 


int main (int argc, char ** argv) { 

    std::map<std::string, Obj> catalog; 
    catalog.insert(std::map<std::string, Obj>::value_type("test", Obj(1,2))); 

    std::cout << catalog["test"].x << " " << catalog["test"].y << std::endl; 

    return 0; 
} 
関連する問題