支持表查找的数据结构

时间:2013-05-03 21:23:38

标签: c++ algorithm database-design data-structures

我有一个用例,我必须在C ++实现的数据结构中以表格的形式存储以下内容,并支持某些查询集

[" Col1"," Col2"," Col3"," Col4"," Col5" ]

[&#34; V1&#34;,&#34; V2&#34;,&#34; V3&#34;,&#34; V4&#34;,&#34; Value1&#34;] < / p>

Col1,Col2,Col3,Col4,Col5一起形成主键。另外,Col1,2是字符串类型,2,4和5是整数类型。

数据结构应支持以下操作:

  1. 支持每行的插入操作。

  2. 鉴于Col1,Col2,Col3,Col4的值找到Col5的值

  3. 鉴于Col1,Col2,CO13,Col4更新Col5

  4. 我正在考虑实现树和支持查找。是否有标准算法/更简单的方法来解决这个问题?

    伪代码/代码将不胜感激。

    感谢。

1 个答案:

答案 0 :(得分:3)

您可能希望将前4列作为键,{5}作为值std::map。我已将列添加为混合std::stringint类型,但您可以将其推广到您喜欢的任何内容。

#include <map>
#include <utility>
#include <tuple>
#include <iostream>
#include <string>

typedef std::map< std::tuple<std::string, std::string, int, int>, int> Table;

int main()
{
    Table my_table;
    std::string a = "Kode", b = "Warrior"; 
    int c = 3, d = 4, e = 5;

    // 1. Support insert operations for each row.
    my_table.insert(std::make_pair(std::make_tuple(a, b, c, d), e));

    // 2. Given the values for Col1, Col2, Col3, Col4 find the value of Col5
    auto it = my_table.find(std::make_tuple(a, b, c, d));
    std::cout << it->second; // prints e

    // 3. Given Col1, Col2, COl3, Col4 update Col5
    it->second = 6; // assign some other value
}

Ideone上的输出。

一个很大的缺点(但不符合您的要求):它不支持列插入,因此它不是电子表格的好模型。您可以尝试在评论中使用std::map< std::vector<std::string>, std::string>,如@NarutSereewattanawoot所述。您可以修改代码以支持该代码,但是您需要一些初始化列表机制来使make_vector具有紧凑的查找语法。 OTOH,std::vector作为关键的缺点是你需要std::tuple避免的类型同质性。如果你想得到真正的花絮,你可以使用std::vector<boost::any>作为键,它既灵活又灵活.-