Предположим, что некоторая структура данных:
typedef struct {
std::string s;
int i;
} data;
Если я использую поле data.s
в качестве ключа при добавлении экземпляров data
в карту типа std::map<std::string&, data>
, скопирует ли строка? Можно ли стереть элемент карты, потому что ссылка станет недействительной?
Также ответы на эти вопросы также относятся к unordered_map
?
EDIT:
Это мое текущее решение... но добавление итератора к карте UGLY:
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;
}