2013-12-08 76 views
0

我現在有以下代碼:C++ - 印刷地圖<結構,結構,構造>類型

struct LR0Item{ 
    LR0Item(const string& lhs_p, vector<string> rhs_p, int dpos_p) 
    : lhs(lhs_p), rhs(rhs_p), dpos(dpos_p) {} 
    string lhs; 
    vector<string> rhs; 
    int dpos; 
}; 

struct Node{ 
    Node(LR0Item* lr) : item(lr) {} 
    LR0Item* item; 
    map<string, Node*> tr; 
}; 

struct fizz{ 
    bool operator()(
        const LR0Item &a, 
        const LR0Item &b) { 
         if(a.lhs != b.lhs) 
          return a.lhs<b.lhs; 
         if(a.dpos != b.dpos) 
          return a.dpos<b.dpos; 
         return a.rhs<b.rhs; 
        } 
}; 

    vector<Node*> N; 
    map<LR0Item,Node*,fizz> nmap; 

我有一些雜代碼來填充NMAP用數據。我想知道如何以良好的格式打印數據(橫向nmap)。我也不完全確定'嘶嘶聲'在做什麼。

+0

通過在 「好」 的格式打印,你的意思是如何橫穿'nmap'? – P0W

+0

你應該查看'map'的文檔來看看「fizz」在做什麼:http://www.cplusplus.com/reference/map/map/ – leewz

+0

@PW是的,我的意思是橫切nmap,爲了清晰起見編輯。 – Dohrann

回答

0

我會給你一個提示,而不是寫整個代碼:「還我不能完全肯定,什麼‘嘶嘶’是做」

typedef map<LR0Item,Node*,fizz> Mymap; 

Mymap::iterator it = nmap.begin(); 

for(;it != nmap.end() ;++it) { 

    //it->first is your key of type LR0Item 
    //it->second is your value of type Node* 
    LR0Item key = it->first ; 
    Node* val_ptr = it->second; 
    /* 
    Now use key.lhs, --> std::string 
      key.rhs, --> std::vector 
      key.dpos --> int 

    And 
      val_ptr->item, --> LR0Item* 
      val_ptr->tr --> map of std::string as key and Node* as its value 

    */ 
} 

而對於

fizz是用作自定義比較器插入元件插入地圖算符nmap

參見this

基本上它首先比較:

  • lhs,如果相等,則通過

  • int dpos,如果相等,則通過

  • 矢量rhslexicographically

+0

我有一個問題,當通過val_ptr-> tr這是一個地圖<字符串,節點*>循環時,我得到我的程序意外崩潰1次左右迭代後。我如何訪問這個'tr'地圖? – Dohrann

+0

任何時候我嘗試訪問val_ptr-> tr我的程序崩潰了,有什麼想法? – Dohrann

+0

@Dohrann你可能應該在新帖子上提問 – P0W