Ich habe ein Problem mit der Karte. Ich entwickle eine Anwendung, in der ich eine Datenbank entwerfe und stehe vor einem Problem, bei dem ich ein Tabellenschema im Hauptspeicher speichern muss. Die Elemente in der Map werden automatisch sortiert (nach dem Schlüssel) und ich brauche die Reihenfolge so wie sie ist. Ich möchte, dass die Elemente so in die Map eingefügt werden, wie der Benutzer sie eingibt. Gibt es eine alternative Datenstruktur, die ich verwenden kann? Außerdem habe ich die gesamte Anwendung entwickelt, ohne diese Tatsache zu kennen. Erst beim Testen konnte ich diese Sache herausfinden (Mein Fehler!). Wenn ich also zu einer völlig anderen Datenstruktur übergehe, müssen mehrere Stellen im Code geändert werden. Bitte lassen Sie mich wissen, ob es einen einfachen Weg gibt, dieses Problem zu beseitigen, oder zumindest eine ähnliche Datenstruktur, die ich verwenden kann, so dass die Operationen auf Map denen der neuen Datenstruktur ähnlich sind.
Dies ist der Code, den ich geschrieben habe, um dies zu erreichen:
class Attribute {
public:
string attributeName;
string type; //char, int, etc
int size; //4 for int and corresponding size for char
};
class Table {
public:
string tableName;
map<string, Attribute> attribute;
string primaryKey;
int recordSize;
int totalSize;
int records;
};
Attribute CatalogMemoryHandler::createAttribute(string attributeName, string type, int size) {
Attribute attribute;
attribute.attributeName = attributeName;
attribute.type = type;
attribute.size = size;
return attribute;
}
Table CatalogMemoryHandler::createTable(string tableName, string primaryKey, int recordsSize, int totalSize, int records) {
Table tableObj;
tableObj.tableName = tableName;
tableObj.primaryKey = primaryKey;
tableObj.recordSize = recordsSize;
tableObj.totalSize = totalSize;
tableObj.records = records;
return tableObj;
}
bool CatalogMemoryHandler::addNewTable( string tableName,
string primaryKey,
int recordSize,
int totalSize,
int records,
vector<string> listOfAttributeNames,
vector<string> listOfAttributeTypes,
vector<int> listofAttributeSizes
) {
Table newTable = createTable(tableName, primaryKey, recordSize, totalSize, records);
for(int i = 0; i < (int) listOfAttributeNames.size(); i++) {
Attribute attribute = createAttribute(listOfAttributeNames[i], listOfAttributeTypes[i], listofAttributeSizes[i]);
newTable.attribute.insert( make_pair( listOfAttributeNames[i], attribute ) );
}
cout << "\n";
table[tableName] = newTable;
return true;
}
Bitte helfen Sie mit. Ich danke Ihnen.