2011-10-25 163 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

您在代碼末尾缺少兩個緊密的括號。 – LowTechGeek

+0

@ybungalobill,我們是對的。我更新我的問題與實際代碼 – cateof

回答

3

我最好的猜測是你沒有默認或複製構造函數在你的Obj(你沒有任何在你發佈的代碼,但我認爲你有一個需要兩個整數)。你在catalog.insert()行也有一個錯字。這裏是爲我工作,使用代碼:

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; 
} 
+1

啊你忍者編輯我! :)您需要創建一個operator <<,如另一個答案中所述,或者訪問x,y成員。 – JoeFish

+0

爲相同的值多次執行'operator []'會嚴重降低性能。 – Chad

+0

同意,因爲我確定一遍又一遍地將相同的C字符串轉換爲std :: string也是如此。該代碼只是爲了說明以類似於原始問題的方式訪問地圖。 – JoeFish

2

爲您Obj類的operator<<,然後你可以這樣做std::cout << catalog["test"];(我假設在插入呼叫丟失的括號只是複製粘貼-O)。

0

鑑於這些類型:

class Obj { 
    int x; 
    int y; }; 

std::map<string, Obj> catalog; 

鑑於人口稠密catalog對象:

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

我改了一下你的代碼。

#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; 
    } 
} 
相關問題