假設一些數據結構:作爲參考性病關鍵::地圖
typedef struct {
std::string s;
int i;
} data;
如果我使用領域data.s
關鍵在地圖std::map<std::string&, data>
型的加入data
實例時,執行字符串被複制?擦除地圖元素是否安全,因爲引用將變爲無效?
此外,這些問題的答案也適用於unordered_map
?
編輯:
這是我目前的解決辦法......但加入迭代的地圖是醜陋:
typedef struct {
const std::string* s;
int i;
} data;
std::map<std::string, data> map;
typedef std::map<std::string, data>::iterator iterator;
// add an element to the map
iterator add_element(const std::string& s) {
std::pair<iterator, bool> p = states.insert(std::make_pair(s, data()));
iterator i = p.first;
if(p.second) {
data& d = (*i).second;
d.s = &(*i).first;
}
return i;
}
感謝您的回答。如果我想避免有兩個字符串的副本,我應該在'struct data'中使用一個引用嗎? – 2010-07-13 10:06:58
另外,當你說我不能存儲引用,你的意思是STL強制複製? – 2010-07-13 10:10:16
@Helltone作爲結構體或類的成員,很難正確地使用它們 - 這實際上並不是它們的意圖。相反,你應該使用一個指針,或者從結構中完全省略字符串。 – 2010-07-13 10:11:38