C++ 内存表

标签 c++

谁能推荐一个轻量级开源C++表数据结构,其数据访问类似于数据库表? (即一个二维数组,但具有命名列 - 理想情况下,每一列都将保存单一类型的数据 [见下文])。

我快速浏览了谷歌,但没有发现任何有用的东西。

在我看来,这些是可供我选择的选项:

  1. 从头开始自己写(不想发明轮子)
  2. 从 mySQL++ 中删除 SimpleResult 类并破解它
  3. 使用 sqlite (不知道这会有多轻巧 - 因为我不需要查询引擎和所有其他东西)
  4. 在这里询问是否有人知道这样的图书馆

所以我来了,选择最快的路线(希望这条路线也能最有效地利用我的时间 - 因为这里推荐的任何东西都可能经过同行评审)。

那么,谁能推荐一个提供“类似数据库表”接口(interface)的 C++ 类/类集?

主要要求是:

  1. 列有名称
  2. 可以使用行、列索引访问单元格
  3. 我可以在表格中添加行和列(理想情况下,我也可以删除它们)
  4. (很高兴):列可以有类型,因此可以节省转换为字符串的成本

[编辑]

为了进一步演示我想如何使用该库,请查看下面的伪代码以了解此类类的简单使用(简单,意味着现在行和列的迭代 - 这真的很酷)。现在只是保持简单:

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/

相关文章:

c++ - 在 C++ 中模拟 lambda 的复制赋值运算符

c++ - 防止运算符被插入到字符串流中

c++ - 无法在调试版本 C++ 中获取调用堆栈

java - JNI native dll 不返回 jobjectArray 导致 VM 崩溃

c++ - 这个双向链表代码怎么解释呢?

c++ - 不确定这个递归函数返回什么

c++ - 调用结构默认析构函数?

c++ - 无法从 'const Eigen::GeneralProduct<Lhs,Rhs,ProductType>' 转换为 'double'

c++ - 基于四元数的第一人称视角相机

c++ - 为什么此算法的这个 "improvement"不起作用?