谁能推荐一个轻量级开源C++表数据结构,其数据访问类似于数据库表? (即一个二维数组,但具有命名列 - 理想情况下,每一列都将保存单一类型的数据 [见下文])。
我快速浏览了谷歌,但没有发现任何有用的东西。
在我看来,这些是可供我选择的选项:
- 从头开始自己写(不想发明轮子)
- 从 mySQL++ 中删除 SimpleResult 类并破解它
- 使用 sqlite (不知道这会有多轻巧 - 因为我不需要查询引擎和所有其他东西)
- 在这里询问是否有人知道这样的图书馆
所以我来了,选择最快的路线(希望这条路线也能最有效地利用我的时间 - 因为这里推荐的任何东西都可能经过同行评审)。
那么,谁能推荐一个提供“类似数据库表”接口(interface)的 C++ 类/类集?
主要要求是:
- 列有名称
- 可以使用行、列索引访问单元格
- 我可以在表格中添加行和列(理想情况下,我也可以删除它们)
- (很高兴):列可以有类型,因此可以节省转换为字符串的成本
[编辑]
为了进一步演示我想如何使用该库,请查看下面的伪代码以了解此类类的简单使用(简单,意味着现在行和列的迭代 - 这真的很酷)。现在只是保持简单:
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')));
}
最佳答案
对于从头开始创建(非常大的头)尝试 Boost Multi-index Container .它不是真正的数据库实现,但它可以提供帮助。
关于C++ 内存表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2283896/