einige Datenstruktur Angenommen:Referenz als Schlüssel in std :: map
typedef struct {
std::string s;
int i;
} data;
Wenn ich das Feld data.s
als Schlüssel verwenden, wenn Instanzen von data
in einer Karte des Typs std::map<std::string&, data>
das Hinzufügen, tut die Zeichenkette kopiert wird? Ist es sicher, ein Element der Karte zu löschen, weil die Referenz ungültig wird?
Auch die Antworten auf diese Fragen gelten auch für eine unordered_map
?
EDIT:
Dies ist meine aktuelle Lösung ... aber auf der Karte Iterator Zugabe ist 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;
}
Danke für die Antwort. Wenn ich zwei Kopien der Zeichenkette vermeiden möchte, sollte ich stattdessen lieber eine Referenz in den 'struct data' verwenden? –
Wenn Sie sagen, dass ich keine Referenzen speichern kann, meinen Sie, dass die STL eine Kopie erzwingt? –
@Helltone Referenzen sind als Mitglieder von Strukturen oder Klassen schwer zu verwenden - das ist nicht wirklich das, wofür sie bestimmt sind. Stattdessen sollten Sie einen Zeiger verwenden oder die Zeichenfolge aus der Struktur ganz weglassen. –