【发布时间】:2010-07-13 09:43:59
【问题描述】:
假设一些数据结构:
typedef struct {
std::string s;
int i;
} data;
如果我在std::map<std::string&, data> 类型的映射中添加data 的实例时使用字段data.s 作为键,是否会复制字符串?删除地图元素是否安全,因为引用将变为无效?
这些问题的答案是否也适用于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;
}
【问题讨论】: