您可能希望将std::map
前 4 列作为键,将第 5 列作为值。我已经将列分为混合类型std::string
和int
类型,但是您可以将其概括为您喜欢的任何内容。
#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, astd::vector
作为键的缺点是您需要std::tuple
避免类型同质性。如果您想获得真正的花哨,您可以将 astd::vector<boost::any>
作为键,它既是类型灵活的,也是列大小灵活的。