2013-04-05 66 views
0

我有一個包含字符串到精靈關聯的地圖。該函數用於返回在屏幕上繪製的精靈。下面是函數:返回地圖循環的問題

sf::Sprite LoopSprite() 
{ 
    for (std::map<std::string,sf::Sprite>::iterator it=SpriteMap.begin(); it!=SpriteMap.end(); ++it) 
    { 
     return it->second; 
    } 
} 

我用其中的取材容易做循環的載體有這些,但我想用一個地圖,以便更容易識別爲維護代碼。上面的功能只允許繪製地圖中的一幅圖像。這個功能有什麼問題嗎?

sf::Sprite LoopSprite(int element) 
{ 
    return vec[element]; 
} 

正如指出的這個作品,因爲它需要的元素,以便只有一個回報,但我想,除了與地圖相同的結果。問題在於,發送0-vec.size很容易。我唯一的想法是有一個字符串的矢量,以便於循環。

+0

你是如何嘗試使用這個功能嗎?它將在第一次迭代時簡單地返回第一個「sf :: Sprite」。它也不適用於矢量。 – 2013-04-05 18:31:45

+0

你正在第一次迭代本身! – Naveen 2013-04-05 18:32:45

+0

換句話說,你的函數和sf :: Sprite LoopSprite(){返回SpriteMap.begin() - > second; }' – jrok 2013-04-05 18:34:55

回答

1

在第一次迭代中,您的函數將簡單地爲return,僅返回地圖中的第一個元素。

你在最初的評論中說,當你使用一個向量時,函數接受了一個參數int並返回了該元素。如果你還想要的功能,就可以實現與地圖一樣,像這樣:

sf::Sprite LoopSprite(std::string key) 
{ 
    return SpriteMap[key]; 
} 

如果你想遍歷內LoopSprite地圖的元素,那麼你就需要移動的代碼行實際上,與每個元素的東西進入功能:

所有的
void LoopSprite() 
{ 
    for (std::map<std::string,sf::Sprite>::iterator it=SpriteMap.begin(); it!=SpriteMap.end(); ++it) 
    { 
     // Do something with it->second 
    } 
} 
+0

得到你,非常感謝;) – Chivos 2013-04-05 18:46:28

1

首先你要返回這是不允許的局部變量。即使從函數返回後,它可能爲空或無效。

你只返回這個零件SpriteMap.begin()這實際上是無用的。這段代碼要容易得多。

sf::Sprite LoopSprite(string key) 
{ 
    std::map<std::string,sf::Sprite>::iterator it = SpriteMap.begin(); 

    while(it!=SpriteMap.end()) 
    { 
     if(check) // check if this is your desired key 
      return value; 
     ++it; 
    } 
    return null; 
} 

地圖通常用於以簡單的方式:

string key = "keyItem";  
sf::Sprite ans = SpriteMap[key];