Can anyone recommend a lightweight open source C++ table data structure that has data access similar to a database table? (i.e. a 2D array but with named columns - ideally, each column will hold data of a single type [see below]).
I have had a quick look on Google, but have not found anything very useful.
The way I see it, these are the options available to me:
- Write my own from scratch (don't really want to invent the wheel)
- rip out the SimpleResult class from mySQL++ and hack around it
- use sqlite (don't know how lightwight this will be - since I dont need the querying engine and all the other stuff)
- Ask in here to see if anyone is aware of such a library
So here I am, choosing the quickest route (hopefully one that will also prove to be the the most efficient use of my time - since whatever is recommended here is likely to be peer reviewed).
So, can anyone recommend a C++ class/ set of classes that provides a "database table like" interface?
The main requirements are:
- Columns have names
- Cells can be accessed using row, column indexes
- I Can add rows and columns to the table (ideally, I can remove them too)
- (Nice to have): columns can have types, so it saves teh cost of converting to/from strings
[Edit]
To further demonstrate how I want to use the library, please see the pseudo code below to see simple use of such a class (simple, meaning now iteration of rows and columns - which would be really cool). For now just keoping things simple:
typedef MemoryTable::ColType ColumnType;
table = new MemoryTable();
// Set up the structure (this can be modified later using removeColumn() etc
table->addColumn(ColumnType::Integer, 'id');
table->addColumn(ColumnType::String, 'name');
table->addColumn(ColumnType::Boolean, 'gender');
table->addColumn(ColumnType::Double, 'weight');
for (size_t i=0; i<10; i++)
{
table->addRow();
numrows = table->getNumRows();
std::cout << "We now have " << numrows << " rows.\n";
// Note can access cells using column name or index
// Also using generic value getter/setter methods. Can throw exception on type mismatch
table->setValue(i, 'id', i*i);
table->setValue(i, 'name', getRandomSimpsonCharacterName());
//just to show use of a getter method
table->setValue(i, 'gender', checkGender(table->getValue(i, 'name')));
table->setValue(i, 3, guessWeight(table->getValue(i, 'name')));
}