2010-02-26 40 views
0

我有一個圖是這樣的:如何更改值的對象的屬性到地圖

map<prmNode,vector<prmEdge> > nodo2archi; 

在某些情況下,我必須要改變的值對象的屬性到prmEdge的載體。這是代碼:

prmNode par=freePathNode[z]; 
z++; 
prmNode arr=freePathNode[z]; 

map<prmNode,vector<prmEdge> >::iterator it; 
it=nodo2archi.find(par); 
app.clear(); 
vector<prmEdge> arc; 
arc=(*it).second; 
app=arc; 
vector<prmEdge>::iterator itarc; 
for (itarc=app.begin(); itarc!=app.end(); itarc++){ 
    prmEdge arco=(*itarc); 
    int a=arco.getFrom(); 
    int b=arco.getTo(); 

    int f=par.getIndex(); 
    int t=arr.getIndex(); 
    if ((a==f && b==t) || (b==f && a==t)){ 
     if (arco.getState()==0){ 
      if (!is_free_arco(par,arr)){ 
       togli_arco_par(arco,arr); 
        erased = true; 
        return erased; 
      } 
     else{ 
      //ERROR 
        //it->second(it->second.begin()).setState(1); 
      //(*it).second.begin().setState(1); 
     } 
      } 
     } 
    }  

我必須使用方法setState將屬性更改爲映射。問題是,我沒有任何方法從地圖進行此操作,並以這種方式我有一個編譯錯誤。任何人都可以幫我解決這個問題嗎? 非常感謝!

回答

1

it->second.begin()->setState(1)應該這樣做。 it->second.begin()是一個向量迭代器,所以你需要->來訪問向量元素。

如果您需要訪問向量的其他元素,當然可以使用向量的接口而不是迭代器,例如, it->second[2].setState(1)

+0

非常感謝你。我認爲這是正確的方法。我還有一個問題。例如,如果要修改的對象是矢量的第三個,我希望這樣做:it-> second.begin()+ 2-> setState(1);但這不是編譯,我怎麼辦?謝謝 – livio8495 2010-02-26 15:27:54

+0

這就是它 - >秒[2] .setState(1); – 2010-02-26 15:30:10

+0

或'(it-> second.begin()+ 2) - > setState(1)',如果您特別想使用迭代器。 – 2010-02-26 15:39:52

1

這必須工作:

it->second.begin()->setState(1); 

至少,下面我的代碼工作:

struct prmNode {}; 
struct prmEdge { void setState(int) {} }; 
map<prmNode,vector<prmEdge> > x; 
map<prmNode,vector<prmEdge> >::iterator it = x.begin(); 
it->second.begin()->setState(1); 
+0

非常感謝。我認爲這是正確的方法。我還有一個問題。例如,如果要修改的對象是矢量的第三個,我希望如下所示: it-> second.begin()+ 2-> setState(1); 但這不能編譯,我怎麼辦? 謝謝 – livio8495 2010-02-26 15:27:26

+0

由於@Mike已經建議,(it-> second.begin()+ 2) - > setState(1)會做。 – Vlad 2010-02-26 16:10:08