假设一些数据结构:
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;
}
原文由 Giovanni Funchal 发布,翻译遵循 CC BY-SA 4.0 许可协议
C++11
由于 C++11 参考包装器 是标准的一部分。
使用升压
您可能想看看 boost.ref 。它提供了一个包装器,允许在 STL 容器中使用引用,如下所示: