2014-09-27 21 views
1

我有一個map的形式map<long, class>和我搜索一個長的元素,返回形式pair<bool, class&>的結果 - bool指示引用是否有效。這是一個操作C++容器元素的正確方法嗎?

參考是從迭代即,形式的it->second其中it是指向具有正確longmap元件的迭代器。

然後,我繼續在另一個函數中操作對類實例的引用。

所以我的問題是:

  • 這是返回一個參考的有效方法是什麼?
  • 並將操縱引用的對象改變地圖中包含的元素?

如果這些看起來像是愚蠢的問題,我會提前道歉:我認爲答案很簡單,但我的代碼行爲不端,所以我試圖堵塞所有可能的空白。

+0

如果'map'改變了,這個保持有效嗎? – 2014-09-27 12:32:33

+0

作爲一個sidenode:使用'myMap.find(longValue)'來找到你要找的東西。 – adam10603 2014-09-27 12:55:18

回答

3

1)只有在布爾標誌爲真時才使用引用,並且引用的對象不會從地圖中刪除。

2)雖然我會稱這在技術上有效,但我不會這樣做。而不是布爾和引用,我會傳遞一個指向類的指針,nullptr表示在地圖中找不到類實例。

3)是的,修改被引用/指向的實例會修改地圖中的對象;只要在這個過程中你沒有意外製作一個對象的副本,並且現在指的是副本,而不是地圖中的原始對象。

0

這是返回參考的有效方法嗎?

不可以。如果沒有要引用的對象,則不能創建「無效引用」。所以你需要在這種情況下使用虛擬對象來引用。

返回一個指針。它更簡單,更小,更不令人驚訝,並且(最重要的是)如果沒有任何對象可以合法地爲null。

並將操縱引用的對象改變地圖中包含的元素?

是的;可以使用引用或指向map元素的指針來操縱該元素。

+0

如果它是假的,我確實會返回一個虛擬的。 – adrianmcmenamin 2014-09-27 13:53:46

+0

@adrianmcmenamin:在這種情況下,它是有效的;只是很奇怪,效率低下而且過於複雜。 – 2014-09-27 17:30:53

相關問題