У меня возникла проблема с картой. Я занимаюсь разработкой приложения, в котором я проектирую базу данных, и столкнулся с проблемой, когда мне нужно хранить схему таблиц в основной памяти. Элементы на карте сортируются автоматически (согласно ключу), и мне нужно, чтобы порядок был таким, какой он есть. Я хочу, чтобы элементы были вставлены в карту так, как пользователь вводит их. Есть ли альтернативная структура данных, которую я могу использовать? Также, не зная этого факта, я разработал все приложение. Только во время тестирования я смог разобраться в этом (мой плохой!). Итак, если я перехожу на совершенно другую структуру данных, то в коде есть несколько мест, которые нуждаются в модификации. Пожалуйста, дайте мне знать, если есть простой способ устранить эту проблему или, по крайней мере, подобную структуру данных, которую я могу использовать, чтобы операции на Map были аналогичны операциям новой структуры данных.
Это код, который я написал для достижения этой цели:
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;
}
Пожалуйста, помогите. Спасибо.