多维锯齿状地图

时间:2013-09-14 19:13:41

标签: c++ linux dictionary multidimensional-array jagged-arrays

我是一名c ++ noob试图建立一个个人财务websocket服务器,实时跟踪我的所有资产和负债。

我发现我可以使map的{​​{1}} s拥有一个多维的键值对系统。

我还发现mapboost::any可用于存储值的多种类型。我的问题是,与其他级别相比,某些级别并不复杂。例如,银行账户只有一个值,即账户中的金额,而经纪账户将有多种类型的投资和特征,所以我想做一些像(在json中):

boost::variant

{ 'bankAccount': 100.00, 'brokerageAccount': { 'stocks': { 'companyName': 'Stack Exchange', 'ticker': 'STAK', 'pps': bazillion ... bankAccount可以brokerageAccount编辑,insert d在需要时可以根据需要丢弃。

我真的不知道从哪里开始。当我试图把

erase

在此websocket server map<string, boost::any> accounts; accounts["cash"] = 100; accounts["brokerageAccount"] = map<string, boost::any>; 的{​​{1}}部分,private带有这些标记broadcast_server,最后两行为gcc

我最好如何以上面的json方式存储数据,能否在任何地方添加和删除键和值?

2 个答案:

答案 0 :(得分:1)

accounts["brokerageAccount"] = map<string, boost::any>;

您无法为对象指定类型。 要解决问题,请添加()

accounts["brokerageAccount"] = map<string, boost::any>();

应该正确编译的变体是:

#include <boost/any.hpp>
#include <map>
#include <string>

int main()
{
   std::map<std::string, boost::any> accounts;
   accounts["cash"] = 100;
   accounts["brokerageAccount"] = std::map<std::string, boost::any>();
}

答案 1 :(得分:1)

最后一行的

map<string, boost::any>是一个类型,而不是该类型的对象。您必须调用该类型的构造函数来创建参数。将最后一行更改为

accounts["brokerageAccount"] = map<string, boost::any>();

将其修复到我的Visual Studio 2010副本